磁盘分区
知识点
- 使用fdisk、gdisk及parted创建和修改MBR和GPT分区
- mkfs、mke2fs、tune2fs格式化及修改文件系统
- 设备挂载与配置
- 创建和管理交换空间
分区冷知识
- 数据盘可以只用扩展分区,但是系统硬盘不行,必须要有活动主分区
- 磁盘分区编号,主分区和扩展分区编号删除某一个,编号不会被替换,逻辑分区的编号会被替换,所以分区的名称是不稳定的,使用设备时不建议用设备名,因为可能不固定,使用UUID,相对稳定
- 早期CentOS系统是以柱面为单位划分磁盘的,6版本开始存在跨柱面情况,5版本不允许。
- fdiskf分区时后面跟的设备是磁盘不是分区
- 分区标签不会影响磁盘使用,基于严谨建议按建议给定。lvm逻辑分区为8e,raid为fd,
- 每个分区第一个扇区是引导扇区(boot sector),存一些必要数据
1. parted命令
parted的操作都是实时生效的,小心使用
- 格式:parted [选项]…[设备[命令[参数]…]…]
- 选项
- -l 列出所有的块设备
- -v 显示版本
- -s 不提醒用户干预
- -h 显示帮助
- -a 新分区对齐
命令:
- mklable|mktable gpt|msdos
创建分区表
例1:parted /dev/sdb mklabel gpt|msdos - print
打印磁盘信息
例2:parted /dev/sdb print - mkpart [primary|logical|extended] [ext4|vfat|xfs] START END
创建分区
例3:parted /dev/sdb mkpart primary 1 200 (默认M) 创建分区第1到第200M - rm NUMBER
删除分区NUMBER为分区编号
例4:parted /dev/sdb rm1
- mklable|mktable gpt|msdos
实验:
克隆磁盘sda分区信息至sdb磁盘,快速创建格式相同的分区,只能是小的分区信息克隆给大的,不然会出错。1、$lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 50G 0 part / ├─sda3 8:3 0 30G 0 part /data ├─sda4 8:4 0 1K 0 part └─sda5 8:5 0 3G 0 part [SWAP] 2、$parted /dev/sdb print Number Start End Size File system Name Flags <==没有分区 3、$dd if=/dev/sda of=/dev/sdb bs=1 count=512 <==复制磁盘a前512字节到b 4、$lsblk <==逻辑分区的分区信息不再前512字节,所以没有5 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 50G 0 part / ├─sda3 8:3 0 30G 0 part /data ├─sda4 8:4 0 1K 0 part └─sda5 8:5 0 3G 0 part [SWAP] sdb 8:16 0 100G 0 disk ├─sdb1 8:17 0 1G 0 part ├─sdb2 8:18 0 50G 0 part ├─sdb3 8:19 0 30G 0 part └─sdb4 8:20 0 1K 0 part
2. 分区工具fdisk和gdisk
这两个工具操作很类似,gdisk擅长管理GPT分区,而fdisk用来管理MBR分区,这两个命令执行后是交互式的,内部有说明数据来操作。
1. gdisk [-l] device 类fdisk的GPT分区管理工具
2. fdisk /dev/sdb MBR分区管理工具
- 分区查看方法(以磁盘sdb为例)
有可能会出现分区后,内存和硬盘不统一的
- 内存中生效的分区,系统识别
ls /dev/sdb
cat /proc/partitions
lsblk - 硬盘中生效的
fdisk -l /dev/sdb
parted /dev/sdb print
gdisk -l /dev/sdb
- 内存中生效的分区,系统识别
- 分区同步方法(以磁盘sdb为例)
- CentOS5/7中
命令:partprobe - CentOS6中
命令:partx -a /dev/sdb同步增加分区
命令:partx -d –nr 6-8 /dev/sdb 同步删除分区时(6-8为分区号) - 重启客户端
- CentOS5/7中
gdisk [-l] device
选项:
-l 列出指定设备的分区,然后退出$gdisk /dev/sdb <==不加选项,进入分区交互界面 ... <==省略 1、Command (? for help): <==可以打开子命令帮助 p 分区列表 t 更改分区类型 L可以列出所有标签,t后输入标签号回车就可以变更,系统默认发的ID标签,扩展分区5,swap分区82 n 创建新分区 d 删除分区 v 校验分区 u 转换单位 w 保存 q 不保存并退出 2、Command (? for help): n <==增加分区 3、Partition number (1-128, default 1):1 <==分区号,随意指定,习惯上从1开始 4、First sector (34-209715166, default = 2048) or {+-}size{KMGTP}: <==开始的扇区,这里习惯采用size写法,跳过这里直接回车 5、Last sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}:+10G <==结束的扇区,采用size写法,在原有基础上+10G的分区,不需要数原来的基数 6、Hex code or GUID (L to show codes, Enter = 8300): <==指定一个codes,L可以查看所有编号,这里默认 7、Command (? for help): w <==保存分区 8、Do you want to proceed? (Y/N): <==确认退出
fdisk -l [-u] [device…]
选项:
-l 列出指定设备的分区,然后退出
-c 不按DOS格式显示分区信息,可以忽略跨柱面报警信息,7中默认
-u 指定以扇区为计算单位,7中默认为扇区,-u=cylinders来以柱面显示$fdisk /dev/sdb <==不加选项,进入分区交互界面 1、Command (m for help): n <==获取帮助是m和help 2、Partition type: <==MBR分区会让选择分区类型 p primary (0 primary, 0 extended, 4 free) e extended 3、Select (default p): e <==是可以直接分扩展分区的 4、Partition number (1-4, default 1): 1 <==分区号,MBR只有4个主分区 5、First sector (2048-209715199, default 2048): <==开始的扇区号为2048,前面的扇区用于存储分区信息等系统信息 6、Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): 10G <==最大的扇区号为209715199,可以在范围内指定分区大小,这里采用+size 7、Command (m for help): n <==继续分区 Partition type: p primary (0 primary, 1 extended, 3 free) l logical (numbered from 5) <==有了扩展分区后,多出逻辑分区选项,并且告诉你编号从5开始 8、Select (default p): p 9、Partition number (2-4, default 2): 2 <==告诉我们主分区编号只有2-4了 10、First sector (20973568-209715199, default 20973568): <==开始扇区变为上面分完10G后的扇区 11、Last sector... (20973568-209715199, default 209715199): +10G 12、Command (m for help): w <==存盘退出
实验:练习脚本,编写分区脚本
#!/bin/bash fdisk /dev/sdb <<EOF n p <==回车,对应默认分区编号 <==回车,对应默认起始扇区 +2G w EOF echo "partition ready"
3. 文件系统
mkfs命令
mkfs在格式化ext系列时实际上调用的是mke2fs- 格式:
mkfs.ext4 /dev/DEVICE
mkfs -t ext4 /dev/DEVICE - 选项
-f :强制执行 - 例如
mkfs.ext3 = mkfs -t ext3
mke2fs -j =mke2fs -t ext3
- 格式:
mke2fs 文件系统ext系列专用管理工具
- 格式:mke2fs [ option]…
选项:
-t :{ext2| ext3| ext4|}
-b:{1024|2048|4096} 指定block的大小1k、2k、4k
-L: 设定卷标 卷标名建议为挂载点的名字
-j :相当于-t ext3
-i #:为数据空间中每多少个字节创建一个inode,此大小不应该小于块大小。PS:分区设置块大小为2048字节,而一个文件最少要占一个块,一个文件占用一个inode,所以块的数量要大于等于inode,也就是此大小不应该小于块大小
-N#:指定分区中创建多少个inode
-I: (大写i)一个inode记录占用的磁盘空间大小,128—4096
-m#:默认5%,为管理人员预留空间占总空间的百分比扫描二维码关注公众号,回复: 3127501 查看本文章例:$mkfs.ext4 -m 1 /dev/sdb1 <==将预留值设定为1% 5242 blocks (1.00%) reserved for the super user
-o FEATURE […]:启用指定挂载选项
例:\$tune2fs -o acl /dev/sdb1 <==启用acl Default mount options: acl
-o ^FEATURE: 关闭指定挂载选项
例:$tune2fs -o ^acl /dev/sdb1 <==关闭acl Default mount options: (none)
tune2fs:重新设定ext系列文件系统可调整参数的值
选项:
-l :查看指定文件系统超级块信息;super block
-L :修改卷标
-m#:修改预留给管理员的空间百分比
-j :将ext2升级为ext3
-o :文件系统属性启用或禁用,-O^has_journal
-o :调整文件系统的默认挂载选项,-o^acl
-U :修改UUID号例如:$tune2fs -U `uuidgen` /dev/sdb1 #:利用uuidgen命令生成UUID,然后更改
-c :修改最大挂载次数
-C:修改当前挂载次数
-i[d|m|w] :修改检测时间周期$tune2fs -l /dev/sdb1 tune2fs 1.41.12 (17-May-2010) Filesystem volume name: <==文件系统名称,即-L设定的卷标 Last mounted on: <==上次挂载点 Filesystem UUID: <==UUID装置定义码 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: <==文件系统的特性,比如日志 Filesystem flags: signed_directory_hash Default mount options: (none) <==预设在挂载时会主动加上的挂载参数 Filesystem state: clean <==文件系统状态,fsck检测结果 Errors behavior: Continue Filesystem OS type: Linux Inode count: 655776 <==inode的总数 Block count: 2622603 <==block的总数 Reserved block count: 131130 <==保留的block总数 Free blocks: 2575671 <==可用block的总数 Free inodes: 655765 <==可用inodes的总数 First block: 0 Block size: 4096 <==块大小 Fragment size: 4096 Reserved GDT blocks: 640 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8096 Inode blocks per group: 506 Filesystem created: Sat Aug 18 23:05:51 2018 Last mount time: n/a Last write time: Sat Aug 18 23:05:52 2018 Mount count: 0 <==挂载次数 Maximum mount count: 20 <==最大挂载次数 ,当挂载次数达到20次,会触发文件系统检查,即触发fsck Last checked: Sat Aug 18 23:05:51 2018 Check interval: 15552000 (6 months) <==当文件系统使用时间达到6个月,会触发文件系统检查 Next check after: Thu Feb 14 23:05:51 2019 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 <==indoe的容量大小 Required extra isize: 28 Desired extra isize: 28 Default directory hash: half_md4 Directory Hash Seed: 25b5a71f-97f4-465b-9eae-1c8e957cdcde
文件系统ext系列检测和修复
- 命令fsck|e2fsck
fsck实际上调用的是e2fsck
可以标记物理损坏,但不能修复
ext系列的修复工具,不能修复xfs 格式
fsck.FS_TYPE device
fsck -t FS_TYPE device例:$fsck.ext4 /dev/sdb1 $fsck /dev/sdb1 <==会自动判断文件系统类型
- 选项
-p:自动修复错误
-r:交互式修复错误
-y: 文件系统修复时,自动回答yes
-f:强制修复 - 注意事项
文件系统修复时,一定是在取消挂载情况下
输入文件系统时,一定要与分区系统文件类型相同
- 命令fsck|e2fsck
文件系统xfs系列检测和修复
- 格式
xfs_repair [options] device
- 格式
文件系统标签
- blkid 块设备属性信息查看
格式:
blkid [option]…[device]
选项:
-U :根据指定的UUID来查找对应设备
-L :根据指定的卷标(LABEL)来查找对应的设备 - e2label 管理ext系列文件系统的卷标
格式:
e2label device [label]
例如:为sdb1分区设置卷标为/data/sdb1
$e2label /dev/sdb1 /data/sdb1 findfs 查找分区
格式:
findfs [options] LABEL=”label”
findfs [options] UUID=”uuid”
例如:查找卷标/data/sdb1属于哪个分区
$findfs LABEL=/data/sdb1mke2fs和tune2fs
格式:
mke2fs -L volume-label device
tune2fs -L volume_label device例:$mke2fs -L /mount/sdb2 /dev/sdb <==建立卷标 $e2label /dev/sdb2 <==查看卷标 /mount/sdb2 $tune2fs -L /data/sdb2 /dev/sdb2 <==修改卷标 $e2label /dev/sdb2 <==查看卷标 /data/sdb2
- blkid 块设备属性信息查看
4. 设备挂载
将文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录作为其他文件访问入口的行为
- 当挂载点的文件夹最好是空的,不是空的文件夹,原有数据会被设备顶掉隐藏,不能访问,直到取消挂载
- 一个设备可以同时挂载在多个文件上,这些文件夹看到的数据是一样的
4.1挂载相关命令
mount
格式:mount DEVICE MOUNT_POINT- device:指明要挂载的设备
- 设备文件:例如/dev/sda5
- LABEL(卷标):例如 LABEL=”/data/sdb1”
- UUID 推荐使用,相对稳定 UUID=” “
- 伪文件系统名称:proc,sysfs,devtmpfs,configfs
示例:
例1:在不影响用户情况下,更改挂载读写类型,可以不取消挂载。 $mount -o remount,rw /mnt/sdb1 <==将设备改为读写 $mount -o remount,ro /mnt/sdb1 <==将设备改为只读 例2:关掉读时间可以使用 $mount -o remount,notime /mnt/sdb1 例3:使用mount命令查看挂载情况 /dev/sdb1 on /data/sdb1 type ext4 (rw,relatime,seclabel,data=ordered) 这里的relatime意思是延迟更新,比如1天后更新,或者读时间滞后写时间激活 例4:启用acl功能 $mount -o remount,acl /mnt/sdb1 例5:使用loop设备将文件挂载到文件夹中 1、dd if=/dev/zero of=/data/p1 bs=1M count=100 建一个100兆的文件 2、mkfs.ext4 /data/p1 给文件写上文件系统,可以用blkid [路径]查看信息 3、mount -o loop /data/p1 /mnt/p1 CentOS6中需要加-o loop才能挂载,CentOS7不用,直接mount挂载 4、CentOS6中默认有0-7个loop设备,更改文件/boot/grub/grub.conf在kernel一行,末尾加上max_loop=#,#可以为任何数,重启电脑。7中没有限制 5、也可以mknod /dev/loop100 b 7 100来创建loop文件 mknod创建设备文件命令,b为设备文件代号 7为设备主编号,100为在主编号设备中的第几个
选项:
- device:指明要挂载的设备
选项 | 功能 |
---|---|
-t vsftype | 指定要挂载的设备上的文件系统类型,一般不用,系统会判定 |
-r | readonly只读挂载,挂载上去不能删不能写,显示为ro,更换挂载读写方式需要先取消挂载 |
-w | read and write,读写挂载 默认的 |
-a | 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能) |
-L’卷标’ | 以卷标指定挂载设备 |
-U‘UUID’ | 以UUID指定要挂载的设备 |
-n | 不更新/etc/mtab,可隐藏设备,/proc/mount文件可看,在centos7中不起作用 |
-B, –bind | 绑定目录到另一个目录上,挂载后节点编号不变,链接数不变,df不能查看,mount可以查看 |
选择-n在centos7中不起作用,是因为/proc/mounts、/etc/mtab在7中都是软连接,指向self/mount
-o options | (挂载文件系统的选项),多个选项使用逗号分隔 |
---|---|
async | 异步模式,修改多次后一次写入 |
sync | 同步模式,内存更改时,同时写磁盘 |
atime/noatime | 取消或开启读时间,包含目录和文件 |
diratime/nodiratime | 开启或关闭读时间,目录的访问时间戳 |
suto/noauto | 是否支持自动挂载,也就是,是否支持-a选项 |
exec/noexec | 是否支持将文件系统上运行应用程序 |
dev/nodev | 是否支持在此文件系统上使用设备文件,如/dev/zero |
suid/nosuid | 是否支持suid和sgid权限 |
remount | 重新挂载,可以不用取消挂载修改设置 |
user/nouser | 是否允许普通用户挂载此设备 |
ro;rw | 只读;读写 |
acl | 启用此文件系统上的acl功能,centos6后加的设备没有acl功能,centos7都有 |
loop | 使用loop设备,挂载iso文件或者带文件系统的文件 |
defaults | 相当于rw,suid,dev,exex,auto,nouser,async,挂载默认的选项 |
- 查看挂载情况
/etc/mtab文件显示,实时更新
mount
4.2 取消挂载
- 查看挂载情况,判断某个目录是否为挂载点
findmnt MOUNT_POINT|device - 查看正在访问指定文件系统的进程
lsof MOUNT_POINT - 查看正在使用挂载点的用户
fuser -v MOUNT_POINT - 终止所有正在访问指定的文件系统的进程,有人在使用挂载设备,是不可以卸载的,这时候可以把所有访问者都踢出去,有下面命令
fuser -km MOUNT_POINT - 卸载
umount DEVICE
umount MOUNT_POINT
4.3文件挂载配置文件
配置文件
/etc/fstab每行定义一个要挂载的文件UUID=****** /data xfs defaults 0 0 <==文件格式 1 2 3 4 5 6 <==解释编号
文件设置解释
- 要挂载的设备或伪文件系统
设备文件:如/dav/sdb1
LABEL:LABEL=””
UUID:UUID=“” <==推荐使用
伪文件系统名称:proc,sysfs - 挂载点
- 文件系统类型:ext3,xfs,nfs,none(目录),
- 挂载选项:defaults,acl,目录(bind),文件(loop)
- 转储频率:0:不做备份 1:每天转储 2:每隔一天转储,目前没意义
- fsck检查的文件系统的顺序:允许检测顺序1、2、3… 不检测为0
建议写0,即使挂载设备出错,也能启动系统,不然出错就会影响启动
- 要挂载的设备或伪文件系统
配置文件出错
- 挂载设备出错,系统会启动不了,
6中设置了自检,如果设备出错就会启动不了,不自检还是可以启动
7中和自检没有关系,设备出错就会启动不了 - 挂载点出错,会报错,不影响启动
- 挂载设备名称建议选择UUID,不要加引号,可能导致错误
- 挂载设备出错,系统会启动不了,
解决方案
- 在救援模式修改挂载设备为不自检,或者将设备参数修正,可以修复;7中修改自检不行,需要修改参数,或者将设备注释掉。
- CentOS6系统故障,救援模式下会默认挂载只读状态的根目录,需要改为读写状态,mount –o rw,remount /
实验:将/home迁移到一个独立分区中,根目录不能这样迁移,可以救援模式迁
- 建立新的硬盘分区,并格式文件系统
- 挂载分区到目录中
- init 1切换到单用户模式
- cp –av /home/* /挂载点
- 将挂载点写入文件fsdab中
- mount -a 载入挂载
- 确定数据没有问题,取消挂载,删除/home
- 再次挂载
拆除带swap的硬盘
1、swapoff device卸载swap
2、删除配置文件相关记录
3、fdisk device删除分区
4.4 处理交换文件和分区
交换分区是系统RAM的补充(swap),作用同虚拟内存
- swap分区大小
如果内存4G以内,设置为内存的1.5-2倍
如果内存大于4G,设置为8G就够用 - 建立swap文件系统
- mkswap device
启用交换分区
- 格式:
swapon[OPTION]…[DEVICE] - 选项:
-a:激活所有的交换分区
-s:查看swap分区有那几个 和/proc/swaps文件记录相同
-p :PRIORITY临时指定优先级,重启 失效
- 格式:
禁用:swapoff [OPTION]…[DEVICE]
SWAP的优先级 配置文件中特征(第5项)修改为pri=#
- 可以指定swap分区0到32767的优先级,值越大优先级越高
- 如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一
- 先添加的swap的优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
示例:增加分区或文件充当swap功能
- 分出一个独立分区,机械磁盘最好私用外道的分区,速度快,优先选择固态磁盘
$fdisk /dev/sdb1 <==记得设置磁盘ID - mkswap将分区格式化为swap文件系统
$mkswap /dev/sdb1 写入fstab文件中,格式为虚拟内存
$vim /etc/fstab UUID=... swap swap defaults 0 0 <==默认优先级 UUID=... swap swap pri=10 0 0 <==指定优先级,放在这里方便对比
swapon -a 激活分区
根据磁盘性能,修改优先级
$swapon -s <==查看生效的swap Filename Type Size Used Priority /dev/sda5 partition 3145724 520 -1 /dev/sdb1 partition 5242876 0 -2 #Priority为优先级
修改后先禁用,再激活,生效
$vim /etc/fstab <==修改配置优先级 $swapoff /dev/sdb1 <==取消挂载 $swapon -s Filename Type Size Used Priority /dev/sda5 partition 3145724 32 -1 $swapon -a <==挂载 $swapon -s <==生效 Filename Type Size Used Priority /dev/sda5 partition 3145724 32 -1 /dev/sdb1 partition 5242876 0 10
- 分出一个独立分区,机械磁盘最好私用外道的分区,速度快,优先选择固态磁盘
4.5 移动介质
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)
挂载点通常在/media或/mut下
光盘
开机自动挂载光盘至目录/mnt/cdrom下
dev/cdrom /mnt/cdrom iso9660 defaults 0 0 <==配置文件格式
- 制作或下载.iso文件挂载
- cp /dev/sr0 /data/centos7.iso将光盘制作成iso文件,或者网络上下载
- mkdir /mnt/iso 建立文件夹
- mount /data/centos7.iso /mnt/iso 将光盘挂载到文件夹上,yum源就是挂载到/var/www/html/相应目录下
- 光驱控制
- eject -t 弹出光驱
- eject 收回光驱
- 将目录制作成.iso文件,以/etc/目录为例
mkisofs -r -o etc.iso /etc/ - 刻录光盘
wodim -v -eject centos.iso
USB设备
- 查看USB设备是否识别
lsusb 或者cat /var/log/messages - 设备名
/dev/sdaX /dev/sdbX 或类似的设备文件
- 查看USB设备是否识别
5 磁盘管理其他命令
- df [-ahikHTm] [目录或文件名]
- 应用:列出文件系统的整体磁盘使用量,只能看到被创建好文件系统并且挂载在目录下,命令中的块固定为1k,与分区命令里的块不同
- 选项:
-a :列出所有文件系统,包括系统持有的/proc等文件系统
-h :以易读方式自动显示
-H:以1000为单位,不是1024
-T:显示文件系统类型
-i :以inode的数量显示
-k:以K为单位
-m:以M为单位
du [-ahskm] 目录或文件名
- 应用:评估文件系统的磁盘使用量
选项:
- a:列出所有的文件与目录容量,默认统计目录下容量
-h:易读显示
-s:列出总量,不显示每个目录容量
-S:不包括子目录下的总计
-k : 以K为单位
-m:以M为单位
–max-depth :指定搜索深度例如:统计etc下的一级目录 $du --max-depth=1 /etc
dd工具
dd命令:convert and copy a file用来转换和复制文件
用法:默认行为将输入的信息打印到屏幕
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#: 从一个文件读 到目标文件 复制单元大小 多少个bs
选项1:
- of=file: 写到所命名的文件而不是都标准输出
- if=file :从所命名文件读取而不是从标准输入
- bs=size: 读和写一样大小的时候使用
- ibs=size 一次读size个byte
- obs=size 一次写size个byte
- cbs=size 一次转换size个byte
- skip=blocks 从开头忽略blocks个ibs大小的块
- seek=blocks 从开头忽略blocks个obs大小的块
- count=n 只拷贝n个记录
选项2:
conv=conversion[,conversion…]用指定的参数转换文件- conversion转换参数:
- ascii转换EBCDIC为ASCII
- ebcdic转换ASCII为EBCDIC
- lcase把大写字符转换为小写字符
ucase把小写字符转换为大写字符
示例:将文件f1 内容转换为大写 $cat f1 abcdef $dd if=f1 of=f3 conv=ucase $cat f3 ABCDEF
- noerror出错时不停止
- nocreat不创建输出文件
notrunc不截短输出文件 保留多出来的部分
示例:$echo abcdef>f1 $echo 123456789 >f2 $dd if=f1 of=f2 bs=1 count=2 skip=2 seek=3 <==不加notrunc $cat f2 123cd <==将多出的部分删除也就是截短 $dd if=f1 of=f2 bs=1 count=2 skip=2 seek=3 conv=notrunc $cat f2 123cd6789
sync把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补充
备份
- 将本地的/dev/sdx整盘备份到/dev/sdy
dd if=/dev/sdx of=/dev/sdy - 将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx of=/path/to/image - 备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
dd if=/dev/sdx|gzip>/path/to/image.gz
- 将本地的/dev/sdx整盘备份到/dev/sdy
恢复
- 将备份文件恢复到指定盘
dd if=/path/to/image of=/dev/sdx - 将压缩的备份文件恢复到指定盘
gzip -dc /path/to/image.gz|dd of=/dev/sdx
- 将备份文件恢复到指定盘
其它应用
- 将内存里的数据拷贝到root目录下的mem.bin文件
dd if=/dev/mem of=/root/mem.bin bs=1024 - 销毁磁盘数据,利用随机数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行
dd if=/dev/urandom of=/dev/sda1 拷贝光盘数据到root文件夹下,并保存为cd.iso文件
dd if=/dev/cdrom of=/root/cd.iso得到最恰当的block size,通过比较dd指令输出中命令的执行时间,即可确定系统最佳的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 of=/root/1Gb.file bs=1024 count=1000000
测试硬盘读速度
dd if=/root/1Gb.file bs=64k|dd of=/dev/null修复硬盘
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且安全高效
- 将内存里的数据拷贝到root目录下的mem.bin文件