如何通过网络将本地磁盘(如 /dev/sda)克隆到 NAS

如何通过网络将本地磁盘(如 /dev/sda)克隆到 NAS

我有一个磁盘 (A)(硬盘 SATA 2 TB 3.5),还有一个 NAS D-Link DNS-320L(硬盘型号与 SATA 2 TB 3.5 完全相同)。两者都分别连接到路由器(本地网络192.168.1.3192.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”所在的系统。然后,您可以使用pvddddrescue甚至使用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”)读取它并将数据推送到ncNAS 上的监听。由于/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 等,对吗?)。您可以编写一个压缩文件,它可能适合,但这与克隆相去甚远。

相关内容