我正在尝试使用 openSUSE 11.3 上最基本的工具(在本例中为:bash、fdisk、tar 和 grub legacy)制作一个基本的备份系统
这是我的脚本的工作流程:
备份.sh:
- (从外部系统运行,例如 LiveCD)
- 根据 fdisk -l 的输出创建一个 fdisk 脚本 ($fscript)[作品]
- 从系统的 fstab 挂载分区[作品]
- 将 file.tgz 中的关键内容压缩成 tar[作品]
恢复.sh:
- (从外部系统运行,例如 LiveCD)
- 运行 fdisk $dest < $fscript 来恢复分区[作品]
- 从系统的 fstab 格式化并挂载分区[失败]
- 从文件.tgz 中提取[手动安装时有效]
- 恢复 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/*' ... *