如何使用 ssh 和 tar 将整个 linux 根文件系统复制到新硬盘上

CHK*_*CHK 17 linux ssh bash cat tar

我需要将整个 linux 根文件系统从故障硬盘驱动器转移到另一台具有开放可用分区的计算机上。我很确定这涉及tarand ssh,但我不记得如何做到这一点。

我大概成像使用新/目标主机上的Live CD来运行的东西是这样的:

ssh user@failingharddrivehost "some tar command | piped into something else"

小智 23

使用 rsync。从新主机,您可以使用

rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/

我不会尝试使用 tar 之类的东西,因为当文件损坏时它可能无法工作。

  • 我也会将 -AHX 作为标志添加到 rsync 以保留 acls、xattrs 和硬链接,从而生成更精确的原始 fs 副本。 (9认同)
  • 我会添加 -x 以忽略不在根文件系统上的项目,然后您可以跳过各种路径的 --exclude 参数。 (6认同)
  • rsync -avPAHXx --numeric-ids 来源目的地/ (2认同)

Zni*_*nik 7

为什么要与目录排除结合起来?将相同的设备安装到另一个目录不是更好的主意吗?现代内核允许这种方式。例如,您已经安装了

/dev/sda1 as / 然后执行: mkdir /CLEANROOT mount /dev/sda1 /CLEANROOT

之后你有: /dev/sda1 as / /dev/sda1 as /CLEANROOT

这是在两个位置可见的相同文件系统,但 /CLEANROOT 没有附加安装。然后,您可以在不带任何排除的情况下 tar 或 rsync /CLEANROOT,而不是复制带排除的 / 。

当然,当您有一些数据分区时,您必须复制其他数据分区。

复制分区是服务器恢复的第一步。另一个是重新生成引导扇区,否则系统将无法从复制的磁盘引导。当您从安装/救援 CD 或随身碟启动时,救援模式很有用。


mpy*_*mpy 6

如果两台计算机位于同一(安全)LAN 上,我建议使用不同的方法netcat。这通常要快得多,因为它不加密数据。

root@good_host$ cd good_partition; netcat -l -p 1234 | tar xvpmf -
root@bad_host$ tar -cv -f- --exclude=/proc --exclude=/sys / | netcat good_host.ip 1234
Run Code Online (Sandbox Code Playgroud)

它在好机器上打开一个侦听端口 1234 netcat -l -p 1234,并将传入数据通过管道传输到tar提取(保留 mtime 和权限)。坏主机将数据发送到此端口,也使用tarnetcat。我包含了一些--exclude参数,因为/proc/sys是虚拟文件系统,因此在新主机上无用。(特别是()中代表您的 RAM 的文件/proc/kcore会添加不必要的数据量)。

但是,您(还)应该考虑转储dd故障驱动器的分区:

user@good_host$ cd good_partition; netcat -l -p 1234 > dump_of_bad_partition_1.dd
root@bad_host$ dd if=/dev/sda1 | netcat good_host.ip 1234
Run Code Online (Sandbox Code Playgroud)

您必须采用/dev/sda1正确的设备。对故障驱动器上的其他分区也执行此操作。

通过该转储,您可以确定您没有错过任何tar无法捕获的重要元数据(例如 ACL)。