从 tar 备份恢复时出现问题:为什么有 /dev/disk/by-id/ 符号链接以及如何避免它们?

从 tar 备份恢复时出现问题:为什么有 /dev/disk/by-id/ 符号链接以及如何避免它们?

我正在尝试使用 openSUSE 11.3 上最基本的工具(在本例中为:bash、fdisk、tar 和 grub legacy)制作一个基本的备份系统

这是我的脚本的工作流程:

备份.sh:

  1. (从外部系统运行,例如 LiveCD)
  2. 根据 fdisk -l 的输出创建一个 fdisk 脚本 ($fscript)[作品]
  3. 从系统的 fstab 挂载分区[作品]
  4. 将 file.tgz 中的关键内容压缩成 tar[作品]

恢复.sh:

  1. (从外部系统运行,例如 LiveCD)
  2. 运行 fdisk $dest < $fscript 来恢复分区[作品]
  3. 从系统的 fstab 格式化并挂载分区[失败]
  4. 从文件.tgz 中提取[手动安装时有效]
  5. 恢复 grub[失败]

我最近注意到 openSUSE(虽然我确信它与发行版无关)在 /etc/fstab 和 /boot/grub/menu.lst 中有不同的输出,更准确地说,分区名称例如“/dev/disk/by-id/numbers-品牌名称-morenumbers-part2“ 代替 ”/dev/sda2“——但它基本上是一个简单的符号链接。

我对此有疑问:

  • 这样的符号链接有什么意义呢,特别是当我们在不同的磁盘上恢复时?
  • 有没有办法可以完全阻止创建这些符号链接并在各处使用“真正的” /dev/sdx?
  • 如果前一个是否定的,您知道如何在文本文件中动态替换这些符号链接吗?我尝试了这个脚本,但只有当文件以符号链接描述开头时才有效(fstab 的情况,而不是 menu.lst):

    ### search and replace /dev/disk/by-id/... to /dev/sdx
    while read oldVolume rest; do # get first element, ignore rest of line
        if [[ "$oldVolume" =~ ^/dev/disk/by-id/.*(-part[0-9]*$)? ]]; then
            newVolume=$(readlink $oldVolume) # replace pointer by pointee, returns "../../sdx"
            echo /dev/${newVolume##*/} $rest >> TMP # format to "/dev/sdx", write line
        else
            echo $oldVolume $rest >> TMP # nothing to do
        fi
    done < $file
    mv -f TMP $file # save changes
    

我在 Google 上找不到解决方案,所以我希望这里的一些成员可以帮助我。

谢谢。

答案1

我建议您使用排除或包含列表来备份 tar。仅备份必要的目录并避免 /dev /proc /mnt /media 等...

cd /
tar cvzf backup.tar.gz --exclude='dev/*' --exclude='proc/*' ... *

相关内容