将一个分区中的所有文件复制到另一个分区的文件夹中并更新符号链接

将一个分区中的所有文件复制到另一个分区的文件夹中并更新符号链接

我有两个分区:

  • /dev/sda安装为/
  • /dev/sdb已安装 ias/stuff

我想复制一切/到,/stuff/backup但我还希望符号链接更新为指向/在/stuff/backup

例如,如果我有一个如下的符号链接:

/path/to/some/link -> /path/to/the/real/file

备份后它应该看起来像这样:

/stuff/backup/path/to/some/link -> /stuff/backup/path/to/the/real/file

我用 Google 搜索了一下但似乎无法弄清楚。

答案1

从讨论来看,在我看来,tar 是最好的工具,因为它可以保留链接。我还建议从实时 CD 执行此操作。您需要挂载 ubuntu 根分区并将 cd 放入其中。

如果要备份数据库,请使用数据库工具,例如 mysqldump

从正在运行的系统(非实时 USB):

注意:在运行此命令之前请检查这些排除项,请参阅下文了解详细信息。

最小排除项是/proc /tmp /mnt /dev其他/sys 项是可选的,但会显著减少备份的大小

cd / # THIS CD IS IMPORTANT THE FOLLOWING LONG COMMAND IS RUN FROM /
tar -cvpzf backup.tar.gz \
--exclude=/backup.tar.gz \
--exclude=/proc \
--exclude=/tmp \
--exclude=/mnt \
--exclude=/dev \
--exclude=/sys \
--exclude=/run \ 
--exclude=/media \ 
--exclude=/var/log \
--exclude=/var/cache/apt/archives \
--exclude=/usr/src/linux-headers* \ 
--exclude=/home/*/.gvfs \
--exclude=/home/*/.cache \ 
--exclude=/home/*/.local/share/Trash /

这将压缩档案,它是完全可移植的,位于/backup.tar.gz

这些选项的含义:来自https://help.ubuntu.com/community/BackupYourSystem/TAR

tar - 是创建档案的命令。它由紧随其后的每个字母修改,每个字母的解释如下。

c—创建一个新的备份档案。

v - 详细模式,tar 将会把它正在执行的操作打印到屏幕上。

p - 保留存档中文件的权限以便稍后恢复。

z-使用“gzip”压缩备份文件以使其更小。

f - 指定存储备份的位置,本例中使用的文件名为 backup.tar.gz。它将存储在当前工作目录中,即您使用 cd 命令时设置的目录。

\ 只是在下一行继续命令,我为了清楚起见添加了它们。

--exclude应该是不言而喻的,但它排除了那些目录。

您可以使用该--one-file-system选项,而不是 /proc、/sys、/mnt、/media、/run 和 /dev 的所有排除项,但是,如果您有单独的 /boot 或 /home (或其他分区),则需要将其添加到存档中。

您可以排除您知道不需要的目录,即没有编辑/usr/share或类似内容。

要查看内容,请参阅如何在不从命令行提取的情况下查看 tar.gz 文件的内容?

你可以使用 vim / gvim 查看文件内容,并使用 zdiff 列出差异

编辑:来自评论“它在显示以下内容时中途崩溃:/lib/plymouth/themes/ /lib/plymouth/themes/ubuntu-text/ tar: /: 文件已更改,因为我们在 mini-PCIe SSD(Sata II 通道)上读取它 10 分钟后。这需要一些时间进行微调”

发生这种情况是因为文件系统正在使用中,因此如果在 tar 期间将更改写入磁盘,您将收到此类消息。可以通过在 tar 存档中排除尽可能多的内容和/或从实时 CD/USB 运行 tar 来避免此类问题

此外,从评论来看,其他可排除的候选人有:

~/.cache # 这些文件完全没有必要,事实上您可以随时通过删除此目录来恢复磁盘空间。

/usr/src/linux-headers* # 再次,您不需要大量的数据。

~/.local/share/Trash # 查看并删除垃圾或排除此目录

/media # 例如将有 Windows 分区

/var/run/user/$USER/... 是指向 /run 的符号链接,因此我也使用 --exclude=/run。#这将具有可移动设备,例如闪存驱动器和 Android 设备,因此可能被排除。

相关内容