将根目录“/”中的所有内容复制到外部存储卷的适当命令?

将根目录“/”中的所有内容复制到外部存储卷的适当命令?

我想/在升级操作系统之前将根目录中的所有内容复制到外部硬盘上,这样万一出现问题,我就可以拥有所有内容。以下命令是否最合适?

username@machine:/$ sudo cp -r . /media/username/TOSHIBA\ EXT/root_copy/

答案1

除了 PP 所说的内容之外,您实际上并不想复制每个目录。我习惯tar备份我需要的所有内容,并“排除”我不需要的目录。该命令基本上是tar (options) BACKUP-FILENAME TARGET。如果您运行以下命令,它应该可以解决问题。

sudo tar -cvpzf /media/username/TOSHIBA\ EXT/root_copy/root-copy.tar.gz --exclude='/mnt' --exclude='/run' --exclude='/proc' --exclude='/sys' --exclude='/media' --exclude='/dev' --exclude='/lost+found' --exclude='/tmp' --exclude='/boot' --exclude=".*lost+found" / 2> /root/tar-errors.txt

我知道这看起来很多,但是 tar 将在 处创建一个备份/media/username/TOSHIBA\ /EXT/root_copy/。文件名为root-copy.tar.gz。它将排除我用 提到的每个目录--exclude,最后它将转储名为 的文件中发生的任何错误/root/tar-errors.txt

以这种方式使用 tar 的另一个好处是,备份文件将是一个“压缩的 tarball”。它本质上是一个压缩档案,因此您可以节省外部驱动器上的空间。

我确信还有更简单的方法可以做到这一点,但我一直使用此方法来备份我的系统。

答案2

考虑对磁盘进行映像处理,而不是只复制文件。升级过程中,可能被搞乱的不仅仅是文件:EFI 系统分区、引导扇区等。

我推荐 Clonezilla。它易于使用且可靠。他们有专用的启动盘。一些救援盘也提供它(例如 GRML),您可以在 Ubuntu Live CD 上安装它。

Clonezilla 图像不可浏览,但可用于轻松地将整个磁盘恢复到以前的状态。

有些人可能会建议使用dd来创建原始映像。这也是一种有效的方法,生成的文件将是可浏览的,但它们将占用与整个分区大小一样多的空间。同时,Clonezilla 使用partclone后台技术,它只复制实际使用的磁盘空间,而忽略可用空间,这与 不同dd。默认情况下,Clonezilla 还会压缩映像。

答案3

是的,如果您想复制下面的所有内容/,那么您可以执行以下操作:

sudo cp -r / media/username/TOSHIBA\ EXT/root_copy/

,在继续之前...你需要意识到你并不是真的想复制一切在下面/:)

您通常只需要复制您的数据;并非所有操作系统二进制文件、已安装的应用程序、配置文件等。这正是 about 命令所做的。

如果操作系统升级出现问题,那么“复制”所有内容就不是一件容易的事情了。如果你有数据,您可以简单地重新安装操作系统并从外部磁盘/介质复制回数据。

此外,如果您设置了除安装操作系统的分区之外的其他分区并将数据保存在那里,那么您可能根本不需要进行外部复制。您可以将数据保存在单独的分区中。如果操作系统重新安装出现问题,您只需擦除该分区并重新安装操作系统,而无需触及保存数据的其他分区。

答案4

我发现将根设备挂载到另一条路径然后使用cp(或更好的rsync)要容易得多。这样我就不必担心排除/dev/disk、等/run/proc

例如:

    eval $(findmnt --pairs --target /)
    sudo mount -t ${FSTYPE} --options ${OPTIONS} --source ${SOURCE} --target /mnt/
    sudo cp -r /mnt/ /media/username/TOSHIBA\ EXT/root_copy/

在我的例子中,第一行创建以下环境变量:

    TARGET="/" SOURCE="/dev/sda8" FSTYPE="ext4" OPTIONS="rw,noatime,errors=remount-ro"

这些用于在 中再次挂载根设备/mnt。或者,您可以使用sudo mount --bind / /mnt(我不确定这两种解决方案之间是否有区别)。

正如其他人所指出的,有些东西/你可能不需要备份,所以无论如何排除它们是有意义的。我的解决方案在你想要复制分区中的所有内容时很有用,这样你原则上甚至可以从外部设备启动(假设efiboot等也在启动时被复制/找到)。

相关内容