Linux磁盘及文件系统管理
创建文件系统 mkfs.ext# .xfs mke2fs 功能比mkfs强大的多 检测及修复 fsck fsck。ext2 。。。 查看文件系统 dumpe2fs tune2fs 调整文件系统特性 tune2fs part -a 扫描已经创建的分区 删除的分区也行 blkid 查看文件系统 lsmod 查看内核已装载模块 findfs :查找分区
设备文件:FHS(LSB) /dev/: 设备
设备文件,关联至设备的驱动程序;设备的访问入口
每一个设备文件叫做一个节点
设备类别:一般在/dev下
-
块(block):随机访问,数据交换单位为“块”(随机访问)
-
字符(character):线性性访问,数据交换单位为字符(顺序访问)
mknod命令:用来创建块设备或者字符设备,并指明设备号,特殊文件
mknod [OPTION]... NAME TYPE [MAJOR MINOR] -m, --mode=MODE :创建设备文件时直接指明权限 设备文件的文件名:ICANN [root@localhost testdir]# mknod -m 755 ltt1 b 10 15 [root@localhost testdir]# mknod -m 755 ltt2 c 8 1 [root@localhost testdir]# ll 总用量 0 brwxr-xr-x+ 1 root root 10, 15 8月 25 20:32 ltt1 crwxr-xr-x+ 1 root root 8, 1 8月 25 20:32 ltt2 创建块设备文件时,必需指定主、次设备号注意:设备文件没有大小,只有设备号!
所以创建个和某设备一样的设备号,那就是同一个文件,
这就相当于复制设备文件了
[root@localhost mnt]# ll /media/qiu/ 总用量 18 drwx------. 2 root root 16384 8月 26 19:18 lost+found -rw-r--r--. 1 root root 0 8月 26 20:45 qqq drwxr-xr-x. 2 root root 2048 8月 26 19:50 tmps [root@localhost mnt]# ll 总用量 18 drwx------. 2 root root 16384 8月 26 19:18 lost+found -rw-r--r--. 1 root root 0 8月 26 20:45 qqq drwxr-xr-x. 2 root root 2048 8月 26 19:50 tmps [root@localhost mnt]# ll ~/CPsdb1 brw-r--r--. 1 root root 8, 17 8月 26 20:37 /root/CPsdb1 [root@localhost mnt]# ll /dev/sdb1 brw-rw----. 1 root disk 8, 17 8月 26 19:33 /dev/sdb1
设备号:
major:主设备号,区别设备类别,用于标明所需驱动程序
minor:次设备号,区分同种类型下的不同的设备;特定设备的访问入口
磁盘设备文件:
IDE接口(ATA):并行, 133MB/s
两个IDE控制器:每个控制器可通过线缆接入两块磁盘,一主一从;
/dev/hd[a-z][#]
/dev/hda, /dev/hdb,
/dev/hdc, /dev/hdd
SCSI接口: 并行,Small Computer System Interface
UltraSCSI 320, 320MB/s SATA接口:串行,Serial ATA, **6Gpbs** USB接口:串行,480MB/s SAS接口:串行设备文件:/dev/sd[a-z][#]
[a-z]:标记设备 [#]:磁盘分区
磁盘的结构
-
track: 磁道
-
sector: 扇区,512bytes
-
cylinder: 柱面(分区划分基于柱面)
-
寻道时间:平均寻道时间
-
现在的普通机械硬盘:5400rpm,7200rpm,1000rpm,1500rpm rpm(转速)
磁盘分区:
为什么要分区?
优化I/O性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个OS
采用不同文件系统
两种分区方式:MBR,GPT
MBR:
Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
如何分区:按柱面
MBR:0磁道0扇区,主引导扇区(master boot record):512bytes**
446bytes: boot loader(MBR)
64bytes:磁盘分区表 (DPT)
4个主分区;3主分区+1扩展(N个逻辑分区从5+分)最多每个分区2T
16bytes: 标识一个分区
2bytes: (BRID)引导记录标示,当前MBR信息是否有效的标记; 55 aa 为有效
GPT:全局唯一标识分区表
GPT:是一个物理硬盘的分区结构。它是可扩展固件接口标准的一部分,用来替代BIOS中的主引导记录分区表。但因为MBR分区表不支持容量大于
2TB的分区,所以也有一些BIOS系统为了支持大容量硬盘而用GPT分区表取代MBR分区表。GPT分区表支持最多128PB的硬盘和分区
划分
使用128位UUID 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动
管理分区
blkid:显示当前已挂载的文件系统
Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。
1、列出当前系统中所有已挂载文件系统的类型:
sudo blkid
2、显示指定设备 UUID:
sudo blkid -s UUID /dev/sda5
3、用指定的 UUID 查设备
blkid -U ef7a7136-8f3b-403a-93aa-1d3406b0dbca (UUID)
4、以列表形式显示
[root@localhost testdir]# blkid -o list device fs_type label mount point UUID ----------------------------------------------------------------------------------- /dev/sda1 xfs /boot a7adb729-cfa8-4292-aae5-59fbd6ad64f1 /dev/sda2 swap <swap> ef7a7136-8f3b-403a-93aa-1d3406b0dbca /dev/sda3 xfs / d82b626b-bbfb-412f-a994-fbe75ed89e82 /dev/sr0 iso9660 CentOS 7 x86_64 (not mounted) 2015-12-09-22-36-30-00
自动生成UUID命令:uuidgen
lsblk命令 (查看内存中的分区)
相当于
ls /dev/sd* == cat /proc/partitions
默认情况下将以树状列出所有块设备
lsblk NAME MAJ:MIN rm SIZE RO type mountpoint sda 8:0 0 232.9G 0 disk ├─sda1 8:1 0 46.6G 0 part / ├─sda2 8:2 0 1K 0 part ├─sda5 8:5 0 190M 0 part /boot ├─sda6 8:6 0 3.7G 0 part [SWAP] ├─sda7 8:7 0 93.1G 0 part /data └─sda8 8:8 0 89.2G 0 part /personal sr0 11:0 1 1024M 0 rom
7个栏目名称如下:
NAME:这是块设备名。
MAJ:MIN:本栏显示主要和次要设备号。
RM:本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
SIZE:本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。
RO:该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
TYPE:本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
MOUNTPOINT:本栏指出设备挂载的挂载点。
默认选项不会列出所有空设备。要查看这些空设备用 -a 选项
开机状态下扫描新加的硬盘(虚拟机适用):
echo " – – – " /sys/class/scsi_host/host0/scan
[root@localhost ~]# echo " - - - " /sys/class/scsi_host/host0/scan [root@localhost ~]# lsblk若扫不出来
后缀变成
host0、1、2、3/scan
都试一下就能出现了
分区工具fdisk命令和gfdisk:
1、查看已经识别的磁盘设备(真实磁盘分区表):
fdisk -l /dev/[hs]d[a-z]可以省略
2、管理分区
fdisk DEVICE —–列出指定设备上的磁盘信息
dos表示 mbr格式的磁盘
boot 引导分区
centos6 start 从哪个柱面
7 从哪个扇区开始block 剩下一共用多少的块
Id表示,磁盘所在的场景类型
83表示linux正常分区(16进制数字)
5扩展分区
82 swap分区
fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘; 常用命令: p: 显示现有分区表; n: 创建新分区 d: 删除现有分区 t: 修改分区ID l: 查看支持哪些分区ID w: 保存退出 q: 不保存退出 m: 显示帮助信息 示例:/dev/sdb 3主+1扩展(3个逻辑) 2主+1扩展(4个逻辑) ... 注意:如果本来有sda1-7 这时你删除了6,那么7还在不过7的盘符就变成了6 出现警告: 查看内核是否已经识别新建分区: # cat /proc/partitions 通知内核强制重读分区表: CentOS 5, 7: partprobe /dev/DEVICE CentOS 6: partx, kpartx 新增分区用(可不加指明的 -n 选项) **partx -a -n M:N /dev/DEVICE**(常用 直接 -a ) kpartx -a /dev/DEVICE -f: force 删除分区用 (可不加指明 -n 选项) partx -d -n M:N /dev/DEVICE centos6: –nr N-M 注意:成功读取分区,可能需要命令重复执行2次或以上; 此外的工具:sfdisk, parted
parted 此工具直接写入内存非常危险
parted的操作都是实时生效的,小心使用
用法:parted [选项]… [设备 [命令 [参数]…]…]
转化 gpt或者msdos的分区格式
parted /dev/sdb mklabel gpt|msdos
显示分区状态
parted /dev/sdb print分区从第一块开始 分1200M
parted /dev/sdb mkpart primary 1 1200 (从1开始到1200M默认M)删除第一个分区
parted /dev/sdb rm 1
parted -l
其他:
查看mbr
hexdump -C -n 512 /dev/sda
备份mbr
dd if=/dev/sda of=/testdir/mbrbak bs=1 count=512
hexdump -C -v /testdir/mbrbak
恢复mbr
dd if=/testdir/mbrbak of=/dev/sdd
fdisk /dev/sdd -l
lsblk
hexdump -C -n 512 /dev/sdd
破坏boot loader
dd if=/dev/zero of=/dev/sdd bs=1 count=446
hexdump -C -v -n 512 /dev/sdd
清除分区标识
dd if=/dev/zero of=/dev/sdd bs=1 count=2 skip=510 seek=510
hexdump -C -v -n 512 /dev/sdd
fdisk -l /dev/sdd
恢复分区标识
dd if=/testdir/mbrbak of=/dev/sdd bs=1 count=2 skip=510 seek=510
文件系统:
概念
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。
文件系统类型 VFS: Virtual File System
-
Linux文件系统: ext2, ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
-
光盘:iso9660
-
Windows:fat32, ntfs
-
Unix: FFS(fast), UFS(unix), JFS2
-
网络文件系统:NFS, CIFS
-
windows网络共享就是用的CIFS
-
linux需要借助samba
-
集群文件系统:GFS2, OCFS2(oracle)
-
分布式文件系统:ceph, moosefs, mogilefs, glusterfs, Lustre
-
RAW:未经处理或者未经格式化产生的文件系统
伪文件系统: tmpfs, hugepagefs, proc, sysfs 交换文件系统:swap
文件系统分类
根据其是否支持"journal(日志)"功能:
文件系统的组成部分:
Linux的虚拟文件系统:VFS
查前支持的文件系统:cat /proc/filesystems
-
在真实的文件系统之上搭建的虚拟文件系统,便于用户访问,提供一个统一的接口
-
内核中的模块:ext4, xfs, vfat
-
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
-
日志型文件系统: ext3, ext4, xfs, …
-
非日志型文件系统: ext2, vfat
元数据:每个索引项称一个inode, (index node) inode table /var/logs/messages 根的inode --> 根目录对应的磁盘块 --> var对应的inode编号 --> 查inode table, 找到编号对应的inode --> var目录的磁盘块 --> logs 的inode编号 --> 查inode table, 找到logs目录的inode --> logs目录的磁盘块 --> 找到messages文件名对应的inode编号 -->查inode表,找到messages的inode编号对应的inode --> messages的磁盘块 dentry 链接文件:访问同一个文件数据不同路径 硬链接:两个文件路径指向了同一个inode; 创建方法: # cp -l SRC DEST # ln SRC DEST 特性: (1) 目录不支持硬链接; (2) 硬链接不能跨文件系统; (3) 硬链接文件与原文件是指向同一个inode,创建硬链接文件会增加inode的引用计数; 符号链接:链接文件是一个完全独立的新文件,但其指向了原文件的文件路径; 特性: (1) 符号链接文件与原文件是两个各自独立文件; (2) 目录可以创建符号链接; (3) 可以跨文件系统; (4) 删除链接不影响原文件;但删除原文件,符号链接指向的文件路径将不复存在,因此,此时链接文件将变成失效的链接; 其大小并非真正原文件大小,而是指向的原文件的文件路径字符串所包含的字节数; 创建方法: ln -s SRC DEST bitmap索引 block group: bitmap: inode, block
创建文件系统
mkfs命令:
(1) # mkfs.FS_TYPE /dev/DEVICE
ext4 xfs btrfs vfat yum install xfsprogs
(2) # mkfs -t FS_TYPE /dev/DEVICE
-
-L 'LABEL': 设定卷标
但凡加上 e2fs的命令一般就是给 ext # 系列文件系统用的的工具
ext系列文件系统:mke2fs
mke2fs [OPTION]... /dev/DEVICE
-
-t {ext2|ext3|ext4}
-
-b {1024|2048|4096}
-
-L 'LABEL'
-
-j: 相当于 -t ext3
– mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3 -
-i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
-
–N #:为数据空间创建个多少个inode
-
–I 一个inode记录大小128—4096
-
-m #: 默认5%,为管理人员预留空间占总空间的百分比
-
-O FEATURE[,…]:启用指定特性
-
-O ^FEATURE:关闭指定特性
blkid块设备属性信息查看
语法:blkid [OPTION]… [DEVICE]
-
-U UUID: 根据指定的UUID来查找对应的设备
-
-L LABEL:根据指定的LABEL来查找对应的设备
[root@localhost ~]# blkid /dev/sda1: UUID="a7adb729-cfa8-4292-aae5-59fbd6ad64f1" TYPE="xfs" /dev/sda2: UUID="ef7a7136-8f3b-403a-93aa-1d3406b0dbca" TYPE="swap" /dev/sda3: UUID="d82b626b-bbfb-412f-a994-fbe75ed89e82" TYPE="xfs" /dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7
e2label:管理ext系列文件系统的LABEL(卷标名)
语法: e2label device [ new-label ](改卷标名):
查看:e2label /dev/DEVICE 设定卷标:e2label /dev/DEVICE LABEL
findfs :查找分区
语法:
以全标明查找分区
findfs [options] LABEL=
以UUID查找分区
findfs [options] UUID=
[root@localhost ~]# findfs LABEL=123 /dev/sdc1 [root@localhost ~]# findfs UUID=d82b626b-bbfb-412f-a994-fbe75ed89e82 /dev/sda3 [root@localhost ~]# blkid -U d82b626b-bbfb-412f-a994-fbe75ed89e82 /dev/sda3
UUID: 全局惟一标识符
tune2fs:调整文件系统的参数
tune2fs:重新设定ext系列文件系统可调整参数的值
-
-l:查看指定文件系统超级块信息;super block
-
-L 'LABEL':修改卷标
-
-m #:修预留给管理员的空间百分比
-
-j: 将ext2升级为ext3
-
-O: 文件系统属性启用或禁用, –O ^has_journal
-
-o: 调整文件系统的默认挂载选项,–o ^acl
-
-U UUID: 修改UUID号
dumpe2fs:
-
-h:查看超级块信息(分组信息),分区用分组管理
文件系统检测和修复:
因进程意外中止或系统崩溃等原因导致写入操作非正常终止时,可能会导致文件损坏;此时,应该修改修复文件系统;
常发生于死机或者非正常关机之后
注意:应该离线进行;
fsck: File System Check
-
fsck.FS_TYPE
-
fsck -t FS_TYPE
注意: FS_TYPE一定要与分区上已经文件类型相同;
-
-a: 自动修复错误
-
-r: 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
-
-y:自动回答为yes
-
-f:强制修复;
注意:这只是文件系统被破坏,里面的文件还是存在的,修复需谨慎,要做备份,
重要的话不要修复!!! 一定要在非挂载的情况下修复!!!
Windows无法识别Linux上专用的文件系统,因此,有存储设备需要两种系统之间交叉使用时,应该使用windows支持的文件系统:
# mkfs -t vfat /dev/DEVICE swap文件系统: Linux上交换空间必须使用独立的磁盘分区; fdisk /dev/DEVICE t命令调整其ID为82; 创建交换分区文件系统:mkswap命令 mkswap [-L LABEL] /dev/DEVICE 注意:在Linux系统上,所有的文件系统必须通过根文件系统的某个分支来访问;根文件系统:根关联到的分区 有一定的要求:FHS
挂载mount
-
挂载:将额外文件系统与根文件系统某现存的目录建立起关联
关系,进而使得此目录做为其它文件访问入口的行为 -
卸载:为解除此关联关系的过程
-
把设备关联挂载点:mount Point
-
mount
-
卸载时:可使用设备,也可以使用挂载点
-
umount
mount命令:
语法格式:mount DEVICE MOUNT_POINT
挂载点
1、事先存在;
2、应该使用别的进程未使用的目录;
3、挂载点下原有的文件将被隐藏;
4、进程正在使用的设备无法被卸载
mount:将显示当前系统已经挂载的所有文件系统的相关信息;
通过查看/etc/mtab文件显示当前已挂载的所有设备或者更全面的 /proc/mounts
命令选项:
-
-r: 只读挂载
-
-w: read and write,读写挂载
-
-L LABEL: 以卷标的方式指定要挂载的设备,因此,此时DEVICE可省;
-
-U UUID:以UUID的方式指定要挂载的设备,因此,此时DEVICE可省;
-
-a: 自动挂载所有的支持自动挂载的设备(/etc/fstab文件中定义的支持自动挂载的设备);
-
-B, –bind: 绑定目录到另一个目录上(挂载目录)
-
-n: 默认情况下,设备挂载与否的改变结果会被保存于/etc/mtab中一份;-n选项用于变动时不更新此文件,df就看不到了!
-
-t FSTYPE: 被挂载的设备上的文件系统类型;可省略,此时mount会自动使用blkid命令来判断之;
示例:
# mount -U dea669ee-e769-46d9-86a8-88925a10278b /data/mydata
-
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
-
async:异步模式
-
sync:同步模式,内存更改时,同时写磁盘(立刻同步,性能不佳)
-
atime/noatime:包含目录和文件
-
diratime/nodiratime:目录的访问时间戳
-
auto/noauto:是否支持自动挂载,是否支持-a选项
-
exec/noexec:是否支持将文件系统上运行应用程序(可执行的程序都不能运行)
-
dev/nodev:是否支持在此文件系统上使用设备文件
-
suid/nosuid:不否支持suid和sgid权限
-
remount:重新挂载
-
acl: 支持使用facl;
# mount -o acl # tune2fs -o acl /dev/DEVICE: 打开acl为默认挂载选项;ro:只读
-
rw:读写
-
user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
-
acl:启用此文件系统上的acl功能
Defaults:相当于rw, nosuid, dev, exec, auto, nouser, async
如果要同时指明多个挂载选项,彼此之间以逗号分隔;
defaults,acl,noatime,noexec查看所有已经挂载设备的方法:
# mount # cat /etc/mtab # cat /proc/mounts
挂载光盘要用 mount -o loop 光盘镜像!
umount命令:
umount DEVICE umount MOUNT_POINT
注意:正在被某进程访问的设备是不可以被卸载的;查看被什么进程所占用:
# lsof 设备
# fuser -v 挂载点查看挂载点被什么进程占用!
# fuser -km 设备或挂载点: 终止正访问挂载点的进程;
此命令非常危险 如果不小心fuser -km / 会踢出所有的用户!!
[root@localhost ~]# umount /dev/sdb1 umount: /mnt:目标忙。 (有些情况下通过 lsof(8) 或 fuser(1) 可以 找到有关使用该设备的进程的有用信息) [root@localhost ~]# lsof /dev/sdb1 -----后面接设备 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 3029 root cwd DIR 8,17 2048 131073 /mnt/tmps [root@localhost ~]# fuser -v /mnt 用户 进程号 权限 命令 /mnt: root kernel mount /mnt [root@localhost ~]# fuser -km /dev/sdb1 /dev/sdb1: 3029c
交换分区:
创建交换分区文件系统:mkswap
free命令:查看内存使用状况
-m
-g
启动交换分区:
swapon [OPTION] [DEVICE]
-a: 启用/etc/fstab文件中定义的所有交换分区
禁用交换分区:
swapoff DEVICE
文件挂载配置文件 /etc/fstab
挂载点和/etc/fstab
配置文件系统体系
被mount、fsck和其它程序使用
系统重启时保留文件系统体系
可以在设备栏使用文件系统卷标
使用mount -a 命令挂载/etc/fstab中的所有文件系统
定义开机可自动挂载的文件系统,每行一个:
6个字段: (1) 挂载的设备: 设备文件 LABEL UUID 伪文件系统:如sysfs, proc, tmpfs等 (2) 挂载点 swap的挂载点仍为swap (3) 文件系统类 (4) 挂载选项 defaults表示使用默认挂载选项; 多个挂载选项间使用逗号分隔;如defaults,acl,noatime pri=100 越大为主,首先启用最大的! ro,表示只读!rw读写 (5) 转储频率 0:从不备份 1: 每天备份 2: 每隔一天备份 (6) 自检次序 0:不自检 1:首先自检,通常只有根文件系统可首先自检 2:次级自检, ... 1:首先自检;一般只有rootfs才用1 mount -a:可自动挂载自定义在此文件中的所支持制动挂载的设备(注意,已经挂载过的再加入fstab里面此命令是不会生效的,必须卸载再挂载或者-o remount才行!) 挂载时如挂载的是目录,那么第三字段 写none,第四字段写bind
注意最后列如果不写0的话,如果写错会出问题,开机启动不了!设备名出错,自检非零,开机无法启动,修复方法
启动不了 mount -o remount,rw /
这样重挂一下根就好了!
1、是以卷标名挂载
2、挂载光盘
3、挂载网络文件系统
创建ISO文件
cp /dev/cdrom /root/centos7.iso
mkisofs -r -o /root/etc.iso /etc
弹出光盘命令
弹出光驱:eject (弹出光驱) eject -t 弹入光驱 可以在机房调试用
U盘的挂载也一样,不过要注意,往U盘里写入数据后多执行
sync 同步一下再用
实现loop 设备和文件关联(用设备关联文件名!)
losetup /dev/loop# 所要挂载的文件名
然后再用mount /dev/loop# 挂载点
挂载上就行了
swap分区的创建与挂载
交换分区是系统RAM的补充
基本设置包括:
• 创建交换分区或者文件
• 使用mkswap写入特殊签名
• 在/etc/fstab文件中添加适当的条目
• 使用swapon -a 激活交换空间
查看谁提供当前swap功能!
cat /proc/swaps blkid -U UUID 号 swapon -s
mount是看不到的
1、创建swap
mkswap /设备名
或者 -L 指明标签 设备号
2、启用:swapon
swapon [OPTION]… [DEVICE]
-a:激活所有的交换分区(这里指的是fstab中的文件内容);
-p PRIORITY:指定优先级
注意由于创建后的优先级比较低,要想优先级高就在/etc/fstab 的文件里 defaults后面追加,pri=value 值越大优先级越高
3、禁用:swapoff [OPTION]… [DEVIC]
df命令和du:
df 显示磁盘分区上的可使用的磁盘空间及文件系统挂载的相关信息,
-l: 仅显示本地文件系统的相关系统;
-h: 单位换算;
-i: 显示inode的使用情况而非磁盘块的;
du命令:用于评估文件大小
-s: 统计整个目录及内部所有文件总体大小(简要信息);
-h: human-readable
dd命令:convert and copy a file
用法:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#:block size, 复制单元大小 count=#:复制多少个bs
-
of=file 写到所命名的文件而不是到标准输出
-
if=file 从所命名文件读取而不是从标准输入
-
skip=blocks 从开头忽略blocks个ibs(来源)大小的块
-
seek=blocks 从开头忽略blocks个obs大小的块
-
bs=size 指定块大小(既是是ibs也是obs)
-
count=n 只拷贝n个记录
-
ibs=size 一次读size个byte
-
obs=size 一次写size个byte
-
cbs=size 一次转化size个byte
[root@localhost ~ ]# echo "12345678">f1 [root@localhost ~ ]# echo "abcdefghi">f2 [root@localhost ~ ]# dd if=f1 of=f2 bs=1 count=4 skip=3 seek=4 记录了4+0 的读入 记录了4+0 的写出 4字节(4 B)已复制,0.000276785 秒,14.5 kB/秒 [root@localhost ~ ]# cat f2 abcd4567 -------注意这里被截断了 abcd4567[root@localhost ~ ]# dd if=f1 of=f2 bs=1 count=4 skip=3 seek=4 conv=notrunc
工具dd
conv=conversion[,conversion…] 用指定的参数转换文件。
转换参数:
ascii 转换 EBCDIC 为 ASCII
ebcdic 转换 ASCII 为 EBCDIC
block 转换为长度为 cbs 的记录,不足部分用空格填充。
unblock 替代cbs长度的每一行尾的空格为新行
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
swab 交换输入的每对字节
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
dd命令常用的几项
磁盘拷贝(磁盘对拷b要大于a的容量):
dd if=/dev/sda of=/dev/sdb
备份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破坏MBR中的bootloader:
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?
#dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
备份:
方式1、 dd if=/dev/sdx of=/dev/sdy
将本地的/dev/sdx整盘备份到/dev/sdy
方式2、 dd if=/dev/sdx of=/path/to/image
将/dev/sdx全盘数据备份到指定路径的image文件
方式3、 dd if=/dev/sdx | gzip >/path/to/image.gz
备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径
恢复:
方式1、dd if=/path/to/image of=/dev/sdx
将备份文件恢复到指定盘
方式2、 gzip -dc /path/to/image.gz | dd of=/dev/sdx
将压缩的备份文件恢复到指定盘
拷贝内存资料到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root目录下的mem.bin文件
从光盘拷贝iso镜像
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件
销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作
无法执行。
得到最恰当的block size
dd if=/dev/zero bs=1024 count=1000000
of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000
of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000
of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000
of=/root/1Gb.file
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小
测试硬盘读写速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度
修复硬盘
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。
原创文章,作者:qzx,如若转载,请注明出处:http://www.178linux.com/42042
评论列表(1条)
文章对磁盘和文件系统管理知识总结的很全面,建议总结完后,可以从增加一块硬盘到分区、格式化、挂载使用,连贯的操作一遍,多加熟悉各个命令的用法。