注意:我这样做是为了更多地了解Linux。我知道还有其他可以通过简单界面使用的工具。
注意:我使用的是 Fedora 23。我将其物理安装在 SSD 上,我的目标是将其移至虚拟机中。
在使用 tar 之前,我已经成功使用过rsync
.我将rsync
我的整个文件系统直接放到一个格式化为ext4
.然后,我将设置一个虚拟机并使用 liveCD 启动、挂载分区并重新同步文件。之后,我更新我的fstab
,重新安装grub并生成grub配置文件,最后生成一个新的initramfs
使用dracut
我现在想使用 tar,这样我就可以将系统的备份存储在单个存档文件中并将其压缩。
我使用此命令来创建 tar:
tar -czpf /path/to/backup.tar.gz /path/to/fs/
请注意,我正在归档的 FS 的路径与我同步到临时目录的文件相同。它不包括诸如proc, dev, sys
等文件夹。
然后我使用 livecd 启动虚拟机,挂载分区,然后使用以下命令以root
用户身份提取 tar:
tar -xzpf /path/to/backup/file -C /path/to/new/partition
当我更新与 rsync 相同的文件时,我重新启动并进入登录屏幕。但是,以 root 身份(使用 tty)或我的用户身份登录不起作用。它只是将我送回登录屏幕——我陷入了登录循环。
我发现当 tar 提取 拥有的文件时amoghrabi
,它会将用户替换为liveuser
.这是因为 tar 使用文件系统的passwd
文件来匹配用户。如果找不到用户名,则会通过UID
和进行匹配GID
。
作为一种可能的解决方案,我尝试使用原始文件系统中的文件更新实时系统的passwd
文件和group
文件。这是行不通的。
我已经阅读过有关使用 flag 的信息--same-owner
,但这在我的情况下不起作用,因为passwd
livecd 文件系统的文件不包含我正在恢复的系统的原始用户。
我有哪些选项可以像使用 rsync 一样成功恢复系统?
编辑:
为了避免混淆,我从 liveCD 启动并安装/dev/sda1
我想要将备份恢复到的分区。我将备份解压到该分区,然后进行 chroot(仍在 liveCD 环境中)以修改/etc/fstab
、重新安装grub
并重新生成initramfs
文件。在完成对备份进行解包的过程后/dev/sda1
,我的备份中的用户似乎amoghrabi
不再拥有其文件(例如/home/amoghrabi/
,文件由 拥有liveuser
。我相信这是因为/etc/passwd
liveCD 上的文件已的 UID1000
与 的 UID 相同amoghrabi
。
这种情况我能做什么?在解压备份之前,我已经尝试将我的文件恢复/etc/passwd
到liveCD 环境。这解决了用户主目录属于 的/etc/group
问题,但我仍然陷入登录循环,我认为这是由于解皮过程中没有正确权限的原因。amoghrabi
amoghrabi
我的最终目标是能够启动/dev/sda1
并拥有系统的工作副本,并使用它tar
来存储我的备份。
答案1
--numeric-owner
在制作存档或提取存档(或两者)时将选项传递给 tar。这会导致使用与存档时相同的 UID 和 GID 来提取文件,而不管您提取的系统上的用户名是什么。由于您要与其他数据库一起恢复用户数据库,因此这些文件最终将归恢复系统上的正确用户所有。
如果您查看从 Live CD 恢复的备份,用户以不同的名称出现是正常的。在文件系统中标识用户的是数字用户 ID,而不是用户名。的用户IDliveuser
是物理用户范围内的第一个数字;amoghrabi
如果这是安装期间或安装之后创建的第一个用户,则的用户 ID可能是相同的数字。我认为 Fedora 是从 UID 500 开始的,因此 中的文件/home/amoghrabi
归 UID 500 所有。从 Live CD 中看到,用户 500 的名称为liveuser
。从原来的系统或者恢复后的系统来看,用户500的名字是amoghrabi
。
如果您想使用从 Live CD 恢复的备份,您需要做的不仅仅是 chroot 操作。您需要挂载多个文件系统(以 chroot 之外的 root 身份完成):
mount --rbind /dev /media/sda1/dev
mount --rbind /proc /media/sda1/proc
mount --rbind /sys /media/sda1/sys
mount -t tmpfs tmpfs /media/sda1/run
mount -t tmpfs tmpfs /media/sda1/tmp
如果您想从 GUI 登录运行 GUI 会话,请在 chroot 中启动显示管理器。您可能需要在 chroot 中启动一些附加服务,我对此不确定。
答案2
我想知道您的部分问题是否是tar
没有捕获所有特殊文件。你看过使用吗dd
?