dd命令是Linux中的一个命令行工具,主要用于数据转换和复制。它可以将一个输入文件转换为指定的输出格式,并可以在转换过程中对数据进行处理。以下是dd命令可以做的一些事情:
dd if="input_file" of="output_file" bs="block_size" count="number"
选项参数 | 解释 |
---|---|
if | 就是输入文件 也可以是设备 |
of | 就是输出文件 也可以是设备 |
bs | 设置一个block的大小,若为指定则默认是512Bytes(一个扇区大小) |
count | 多少个bs的意思 |
将/etc/passwd备份到 /tmp/passwd.back当中
[root@localhost ~]# dd if=/etc/passwd of=/tmp/passwd.back
记录了1+1 的读入
记录了1+1 的写出
846字节(846 B)已复制,0.000485588 秒,1.7 MB/秒
[root@localhost ~]# ll /tmp/passwd.back /etc/passwd
-rw-r--r--. 1 root root 846 4月 5 20:11 /etc/passwd
-rw-r--r--. 1 root root 846 4月 17 17:15 /tmp/passwd.back
# 仔细看一下,我的/etc/passwd文件大小为846bytes,因为我没有设置bs
# 所以默认是512Bytes 为一个单位,因此,上面那个1+1 代表有1个完整的512Bytes
# 以及未满512Bytes的另一个block的意思。
生成一个大小为1MB的随机数据文件,并将其保存为random_data文件。
[root@localhost ~]# dd if=/dev/random of=/tmp/csqfile2 bs=1M count=1
记录了0+1 的读入
记录了0+1 的写出
115字节(115 B)已复制,0.000299195 秒,384 kB/秒
生成一个大小为1MB的空文件,并将其保存为empty_file文件。
[root@localhost ~]# dd if=/dev/zero of=/tmp/csqfile3 bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00182176 秒,576 MB/秒
如果你想要将你的/dev/sda1完整的复制到另一个银盘分区上,请使用你的系统上面未划分完毕的容量在建立一个与/dev/sda1差不多大小的分区(只能比/dev/sda1大,不能比他小),然后进行完整的复制
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xd45966d2 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-104857599,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-104857599,默认为 104857599):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):W
[root@localhost ~]# dd if=/dev/sda1 of=/dev/sdb1
记录了2097152+0 的读入
记录了2097152+0 的写出
1073741824字节(1.1 GB)已复制,42.4799 秒,25.3 MB/秒
[root@localhost ~]# xfs_repair -L /dev/sdb1
[root@localhost ~]# uuidgen
a47cd75e-9efb-48d7-adcb-0e1fd3e7b3a2
[root@localhost ~]# xfs_admin -U a47cd75e-9efb-48d7-adcb-0e1fd3e7b3a2 /dev/sdb1
[root@localhost ~]# mount /dev/sdb1 /mnt/
[root@localhost ~]# df -h /mnt/
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 1014M 151M 864M 15% /mnt
[root@localhost ~]# xfs_growfs /mnt/
[root@localhost ~]# df -h /mnt/
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 5.0G 151M 4.9G 3% /mnt
如上操作参数解释
xfs_repair -L /dev/sdb1
对/dev/sdb1文件系统进行修复。-L选项用于为修复后的文件系统命名,修复可能需要一些时间,具体时间取决于文件系统的大小和损坏程度。在修复期间,不应对文件系统进行任何读写操作,以免导致数据丢失或损坏。
uuidgen
生成一个UUID,用于给修复后的文件系统进行重命名。UUID是一种唯一标识符,用于标识计算机系统中的各种组件,可以用于确保文件系统的唯一性。
xfs_admin -U a47cd75e-9efb-48d7-adcb-0e1fd3e7b3a2 /dev/sdb1
将修复后的文件系统重命名为指定的UUID。-U选项用于指定UUID,即上一步生成的UUID。
xfs_growfs /mnt/
对/mnt目录下的文件系统进行扩容。这个命令可以用于扩大文件系统的存储容量,以适应数据存储的需要。
cpio命令是一个用于文件归档和备份的命令行工具,它可以将多个文件或目录打包成一个单独的文件,并且可以将这个打包文件解压还原成原始的文件和目录
cpio -ovcB > [ file | device ] <== 备份
cpio -ivcdu < [ file | device ] <== 还原
cpio -ivct < [ file | device ] <== 查看
备份会使用到的选项与参数:
-i:解包文件,即将打包文件还原成原始的文件和目录。
-o:打包文件,即将多个文件和目录打包成一个单独的文件。
-B:让默认的blocks可以增加到5120字节,默认是512字节,这样做的好处就是可以让大文件的存储速度加快
-d:自动创建目录,即在解包时自动创建目标目录。
-v:显示详细信息,即在打包或解包时显示更多的信息。
-t:列出文件列表,即显示打包文件中包含的文件和目录列表。
-c:一种较新的 portable format 方式存储
找出/boot下面的所有文件,然后将他备份到/tmp/boot.cpio中
[root@localhost ~]# cd /
[root@localhost /]# find boot -print
boot
boot/efi
boot/efi/EFI
...........
....
# 通过find我们可以找到boot下面应该要存在的文件名,包括文件与目录,千万要记住是绝对路径
[root@localhost /]# find boot |cpio -ocvB > /tmp/boot.cpio
[root@localhost /]# ll -h /tmp/boot.cpio
-rw-r--r--. 1 root root 118M 4月 17 18:00 /tmp/boot.cpio
将刚刚的文件给他在/root目录下解开
[root@localhost ~]# cpio -idvc < /tmp/boot.cpio
[root@localhost ~]# ll /root/boot/
# 可以自行比较一下/root/boot与/boot的内容是否一模一样
其实系统中已经含有一个使用cpio建立的文件,那就是/boot/initramfs-xxx这个文件,现在让我解压缩看看文件内容是什么
[root@localhost ~]# mkdir /tmp/initramfs
[root@localhost ~]# cd /tmp/initramfs/ # 记住得是绝对路径!
[root@localhost initramfs]# cpio -idvc < /boot/initramfs-3.10.0-1160.el7.x86_64.img
.
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/GenuineIntel.bin
early_cpio
# 这就是文件里面的内容