从tar备份恢复的问题:为什么有/ dev / disk / by-id /符号链接,我该如何避免它们?

我正在尝试使用openSUSE 11.3上的最基本的工具(在这种情况下是bash,fdisk,targrub遗留)来创build一个裸机备份系统。

以下是我的脚本的工作stream程:

backup.sh:

  1. (从外部系统运行,例如LiveCD)
  2. 从fdisk -l的输出中创build一个fdisk脚本($ fscript) [作品]
  3. 从系统的fstab挂载分区[作品]
  4. tar file.tgz中的关键东西[作品]

restore.sh:

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

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

我的问题是:

  • 这样的符号链接有什么意义,特别是如果我们要恢复到不同的磁盘上?
  • 有没有办法干净地阻止这些符号链接的创build,并使用“true”/ dev / sdx来代替?
  • 如果以前是不是,你知道一种方法来在文本文件中dynamicreplace这些符号链接? 我试过这个脚本,但只适用于文件以符号链接描述(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 

我一直在谷歌find解决这个问题,所以我希望在这里的一些成员可以帮助我。

谢谢。

我build议你使用一个排除或包含列表来tar。 只备份必要的目录,并避免/ dev / proc / mnt / media等…

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