我想用一个容量翻倍的新硬盘来替换旧的 SSD 硬盘,但不知为何不明白 rsync 的工作原理。
我读过这篇文章将整个文件系统层次结构从一个驱动器复制到另一个驱动器。
我之前从未使用 Linux 克隆过正在运行系统的驱动器。
我对新硬盘进行了与旧硬盘类似的分区:
**Old drive**
Device Start End Sectors Size Type
/dev/sdc1 a b c 1G EFI System
/dev/sdc2 d e f 64G Linux filesystem
/dev/sdc3 g h i 512M Linux swap
/dev/sdc128 j k l 400.3G BIOS boot
**New drive**
Device Start End Sectors Size Type
/dev/sdd1 a b c 1G EFI System
/dev/sdd2 d e f 64G Linux filesystem
/dev/sdd3 g h i 512M Linux swap
/dev/sdd128 j m n 866G Linux filesystem
我还纠正了我迄今为止没有注意到的分区类型错误(8300 为 /home 又名 /sev/sdX128 而不是 BIOS 启动)
我尝试了sudo mount /dev/sdd128 /mnt/ssd/home
下一个,但是由于没有成功(文件系统错误),所以我运行了
sudo rsync -avxHAX --info=progress2 --numeric-ids /dev/sdc128 /dev/sdd128
结果只复制了几个字节,但当我再次使用上述命令挂载驱动器时,它起作用了,我可以通过挂载点从我的主文件夹访问任何文件,所以我认为某种符号链接是使用创建的rsync
。
我尝试再次复制文件
sudo rsync -avxHAX --info=progress2 --numeric-ids /home /mnt/ssd/home
但现在发生的情况是,它/home
被复制到/home/home
,因此 sdc 驱动器很快就超出了磁盘空间。
我想避免使用dd
我更熟悉的东西,因为我读到这不推荐用于正在使用的系统。
我真正需要复制磁盘的命令是什么?(我想拔下旧磁盘并使用新磁盘,而不需要重新安装任何东西[但可能是 GRUB])。
编辑:
现在我注意到我在使用时意外删除了几乎整个/home
文件夹的内容rm -r /home/home
(隐藏文件和文件夹仍然存在),有人可以向我解释当我使用这些命令时究竟发生了什么,如果可能的话,还有一种快速撤消此操作的方法吗?
答案1
假设
- 您从未
mkfs
在 上运行过/dev/sdd128
,因此是“坏文件系统”。分区和文件系统是不同的东西(请参阅我的这个答案)。 - 用
rsync … /dev/sdc128 /dev/sdd128
你覆盖原来的sdd128
特殊文件和sdc128
特殊文件。原始名称已丢失(此时重新启动可以修复此问题),现在这两个名称指的是相同的块设备,即sdc128
你脑海中对这一情况的印象。 sdd128
在安装后/mnt/ssd/home
,并且仍然sdc128
安装/home
,你最终得到相同的旧文件系统安装在两个地方。- 因此
/mnt/ssd/home
和/home
是同一个目录。 rsync … /home /mnt/ssd/home
/mnt/ssd/home/home
由于您在指定源时未使用尾部斜杠,因此创建了额外的目录级别,这就是rsync
工作原理。由于/mnt/ssd/home
和/home
是同一目录,/mnt/ssd/home/home
并且/home/home
也彼此等效。这就是数据出现在中的原因/home/home
。
无法解释
rm -r /home/home
无法清除您的/home
。即使它可以清除,也没有机制可以让该命令清除隐藏文件。但是这个命令:
rm -r /mnt/ssd/home/*
相当于rm -r /home/*
并且它将完全按照描述的方式工作。
结论
- 您没有对原始 (“真实”) 上的文件系统进行任何操作
/dev/sdd128
。很可能那里没有文件系统。 rsync
并不意味着在块设备之间直接复制数据。- 处理诸如此类的特殊文件时,你需要格外小心
/dev/sdd128
。
建议
- 重新启动应该会使
/dev/sd*
节点恢复正常状态。 - 完成上述操作后
rm
,恢复数据的一般方法如下:- 从备份恢复
- 尝试取消删除:(如果
extundelete
文件系统属于 ext 系列)photorec
,,,foremost
scalpel
- 如果你不确定自己在做什么,可以测试一下你计划的方法抓猴子。
本来应该如此
上应该有一个文件系统/dev/sdd128
。你应该已经挂载了它,没有任何错误,然后使用rsync
(在挂载点,挂载点下的目录和文件;而不是中的特殊文件/dev/
)就可以了。
答案2
不存在简单的方法可以撤消 rm,甚至不能保证可以撤消。
rsync 用于复制文件,而不是块设备,对于您正在执行的操作,dd 会更合适。
要使用 rsync,您需要两个块设备都具有文件系统并且已挂载。