Linux下硬盘挂载与DD拷贝
一、硬盘挂载
1. 查看新添加的盘符
查看新添加的盘符, root
下使用 fdisk -l
命令
2. 格式化硬盘文件系统
格式化硬盘文件系统,可以采用 mkfs
命令。
1 | # 格式化硬盘的文件系统,这里格式化为 ext4 系统 |
输入 y
确认后,等待系统完成格式化
3. 挂载硬盘
挂载硬盘,首先需要创建一个文件夹,随后用 mount
命令将硬盘挂载到文件夹上。
1 | # 创建要挂载的文件夹 |
4. 开机自动挂载
前面仅仅实现了手动挂载,但重启后并不会自动挂载。这里需要设置自动挂载。
文件 fstab
包含了你的电脑上的存储设备及其文件系统的信息。它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件
1 | # 进入 fstab 修改配置 |
UUID要修改为自己的,查看硬盘分区的UUID命令
1 | blkid |
5. 查看挂载好的硬盘信息
1 | df -hT |
二、数据拷贝
1. 克隆一个完整的硬盘
从物理磁盘 /dev/sda
到物理磁盘 /dev/sdb
1 | # dd if=/dev/sda of=/dev/sdb bs=512 conv=noerror,sync |
这个命令会克隆整个磁盘,包括MBR(因此也包含bootloader),所有分区,UUID和数据。
- noerror 指定dd命令继续操作,忽略所有的读错误。dd默认行为是会在任何错误时候停止
- sync 如果有读错误,把输入的块填0,所以数据偏移在sync设置时保留
- bs=512 设置块大小512bytes,对于硬盘来说是“经典”的块大小。只有在你的硬盘是4Kb块大小时,你才可以用4096而不是512。同时,请阅读下面的警告,因为这个不仅仅是“块大小”,它同时会影响到如何处理读错误。
要查看硬盘的物理块大小是否为 4K,可以执行以下步骤:
运行以下命令以获取硬盘设备的详细信息:
1 fdisk -l这将列出您系统上所有的硬盘设备。
找到您要检查的硬盘设备,并记录其设备名称,例如
/dev/sda
。运行以下命令以获取硬盘的物理块大小:
1 sudo blockdev --getbsz /dev/sda如果您的硬盘物理块大小为 4K,则命令输出的值应该为 4096。如果输出值为其他值,则硬盘的物理块大小不是 4K。
2. 监视进程
根据磁盘大小,dd运行过程可能会耗时很长,如果想要在执行过程中查看进度,需要使用pv
工具。
首先安装pv
工具
1 | sudo apt install pv |
比如说执行命令
1 | dd if=/dev/sda1 of=/home/efi.img |
修改如下(加入了 | pv | dd
)
1 | dd if=/dev/sda1 | pv | dd of=/home/efi.img |
显示的效果:
1 | root@debian:~# dd if=/dev/sda1 | pv | dd of=/home/efi.img |
3. 使用pkill打印进度
也可以使用 pkill
来显示当前进度
重新打开一个Shell,然后执行如下命令即可每秒输出一次进度信息
1 | watch -n 1 pkill -USR1 -x dd |
三、关于DD命令使用举例
使用dd
命令时需要包含if=
表示源磁盘,和of=
表示目标磁盘。
1. 创建img镜像
将分区创建为镜像,并存储于/home
目录下
1 | # dd if=/dev/sda of=/home/sdadisk.img |
2. 创建分区镜像
上述是复制整个磁盘( /dev/sda
),如果只想复制某个分区,如:/dev/sda2
,也是完全没问题。
同时可以使用bs
参数,规定一次拷贝的字节数,如:bs=4096
。合理使用bs
参数可以优化dd
执行速度,bs
的合理范围要参考本机的性能进行具体设置。
1 | # dd if=/dev/sda2 of=/home/partition2.img bs=4096 |
3. 还原镜像
还原镜像也很简单,原理与创建镜像相同,只需颠倒if=
和of=
两个参数的内容即可,如:
1 | dd if=sdadisk.img of=/dev/sda |
4. 异地备份
可以通过与 SSH
命令组合,进行异地服务器磁盘的备份。如将远端服务器的磁盘/dev/sda
备份至本地bakup.gz
1 | ssh remote_user@remote_server "sudo dd if=/dev/sda | gzip -1 -" | dd of=backup.gz |
其中,remote_user
是远程服务器的用户名,remote_server
是远程服务器的 IP 地址或域名。
该命令将在远程服务器上使用 sudo
权限来执行 dd
命令,并将其输出通过 SSH 传输到本地计算机。本地计算机将备份数据写入名为 backup.gz
的文件中。
- 等待备份完成,这可能需要一段时间,具体取决于磁盘的大小和速度。
- 在备份完成后,使用以下命令验证备份文件是否可用:
1 | gzip -t backup.gz |
如果没有任何错误消息,则备份文件已成功创建并可以使用。
gzip -1 -
命令的含义如下:
gzip
:是一个用于压缩文件的工具。-1
:是压缩级别,表示压缩速度和压缩比之间的折中。值越大,压缩比就越高,但压缩时间也会越长。-
:表示输入文件使用标准输入,即通过管道从其他命令的输出中读取数据。因此,将
gzip -1 -
与其他命令配合使用时,它将从其他命令的输出中读取数据,并使用压缩级别为 1 的 gzip 工具将数据压缩。压缩后的数据可以通过标准输出流发送到其他命令,也可以直接写入文件中。
5. 覆写磁盘
使用0填充整个硬盘:
1 | # dd if=/dev/zero of=/dev/sda |
或者,使用随机数填充整个硬盘,效果更佳:
1 | # dd if=/dev/urandom of=/dev/sda |