我有一个磁盘 (A)(硬盘 SATA 2 TB 3.5),还有一个 NAS D-Link DNS-320L(硬盘型号与 SATA 2 TB 3.5 完全相同)。两者都分别连接到路由器(本地网络192.168.1.3
)192.168.1.2
。
如何使用 将磁盘 A( /dev/sda
) 克隆到我的 NAS( //192.168.1.2/disk
) dd
?
假设的例子(它不起作用):
sudo dd if=/dev/sda |pv|dd of=//192.168.1.2/disk bs=1M conv=notrunc,noerror
笔记:我需要将整个 HD“A”克隆(复制)到 HD“B”. HD“A”包含 SO Ubuntu 16.04 x64、交换、MBR 和其他分区。
目标:若“A”有损坏,则迅速用“B”替换。
答案1
我需要将整个 HD“A”克隆(复制)到 HD“B”。
从 NAS 中移除硬盘“B”,并将其直接连接到硬盘“A”所在的系统。然后,您可以使用pv
或dd
、ddrescue
甚至使用cp
或进行克隆cat
,我认为,它可以像
sudo dd if=/dev/sda of=/dev/sdb
使用您需要的选项。(顺便说一句,您的示例中conv=notrunc,noerror
没有意义。第一个才有意义dd
。)
确实,当任何文件系统/dev/sda
以写访问权限挂载或/dev/sdb
以任何方式挂载时,您不应该这样做。当你的源在顺序克隆过程中发生更改时,就会发生这种情况。
当您在 NAS 上重新安装磁盘时,NAS 可能会看到或看不到您的目标磁盘(其分区、文件系统和文件)。NAS 可能会写入一些更改并破坏克隆(例如,它可能会或可能不会更改 MBR 和以下扇区中的引导加载程序数据)。
我知道您想要一个让目标磁盘始终位于 NAS 内部的解决方案。这很难,因为您的 NAS 不会为您公开磁盘(设备)、其分区或文件系统。它使用 CIFS/SMB、NFS、AFP 或 HTTP/HTTPS 公开文件(存在于 EXT3 文件系统中)。要克隆到磁盘,您需要能够在扇区级别写入它 - 我认为您的 NAS 不允许您就这样做。
我说的是“这很难”,而不是“不可能”,因为如果您可以获得 NAS 的 SSH 访问权限(或 telnet 等),那么您可能能够在扇区级别写入磁盘。您可能会找到带有标准工具的 Linux(?) shell,也许您可以执行类似操作(从硬盘“A”所在的 PC 上的实时 Linux 发行版):
sudo dd if=/dev/sda bs=1M conv=notrunc,noerror | pv | ssh [email protected] "dd of=/dev/your_target_disk bs=1M"
或者用来nc
传输数据。
编辑1。虽然我不确定这是否适用于有问题的 NAS(或任何其他 NAS),但我添加了nc
基于 的解决方案,因为 OP 明确要求这样做(在评论中)。以下解决方案肯定适用于“NAS”,即一台装有 Linux 的普通计算机。
在告诉 NAS 监听传入数据并将其传递给设备之前,您应该确保没有其他进程写入目标磁盘;umount
如果可以,或者至少在 NAS 配置中取消共享该设备。然后:
# log in to NAS
nc -l 3210 | dd of=/dev/sda
该数字3210
是端口号,您可以从范围中选择它1024..65535
。/dev/sda
用正确的设备替换字符串。从现在开始,您的 NAS 等待传入连接。如果其他人在所选端口上连接到它,那么他们的数据将被写入设备,但在家庭环境中,这几乎不是一个问题。但是,如果您担心这一点,那么您应该知道nc
它只接受一个连接(一次一个,总共一个,即它将在第一个连接终止时退出)。因此,如果您在下一步中成功连接,那么您就会知道没有其他人这样做。
接下来告诉您的操作系统使用源磁盘(HD“A”)读取它并将数据推送到nc
NAS 上的监听。由于/dev/sda
不应安装(严格来说:可以安装,但只能是只读的),您最好从某个实时 Linux 发行版中执行此步骤。
# where HD "A" is
dd if=/dev/sda | nc 192.168.1.2 3210
使用dd
您需要的选项(如conv=notrunc,noerror
)。注意 是3210
我在上一步中选择的监听端口号。
实际上你可能想要监控进度,因此更好的命令可能是:
dd if=/dev/sda | pv | nc 192.168.1.2 3210
或者,您可以dd
通过向其传递信号来请求报告其进度USR1
。在另一个终端中运行以下命令:
kill -s USR1 $(pidof dd)
并且信息将会出现在运行的终端中dd
。
完成后dd
,如果两边都没有错误,则应重新启动 NAS优雅地。让它成为sync
目标磁盘非常重要,所以不要直接切断电源。使用 NAS 提供的任何正确重启或关闭方式。
编辑 1 到此结束。
如果您成功完成此操作,那么正常的 NAS 操作可能会或不会破坏克隆中的某些内容,就像您重新安装了直接克隆的磁盘一样。
很少有评论建议挂载共享并在文件级别写入。您至少有两个选择:
- 你复制文件(例如使用
rsync
); - 或者将 HD“A”的整个图像写入 HD“B”上的文件系统中。
这两种方法可能都很有用,但克隆都不是。您无法随心所欲地用 HD“B”替换 HD“A”。此外,后一种方法在您的特定情况下根本不起作用,因为它需要 HD“B”文件系统上的可用空间大于整个 HD“A”(如果您使用稀疏文件,则此限制可能不成立,但您不能将稀疏文件用于 NFS、SMB 等,对吗?)。您可以编写一个压缩文件,它可能适合,但这与克隆相去甚远。