使用 tar 恢复文件系统导致登录循环

使用 tar 恢复文件系统导致登录循环

注意:我这样做是为了更多地了解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,但这在我的情况下不起作用,因为passwdlivecd 文件系统的文件不包含我正在恢复的系统的原始用户。

我有哪些选项可以像使用 rsync 一样成功恢复系统?

编辑:

为了避免混淆,我从 liveCD 启动并安装/dev/sda1我想要将备份恢复到的分区。我将备份解压到该分区,然后进行 chroot(仍在 liveCD 环境中)以修改/etc/fstab、重新安装grub并重新生成initramfs文件。在完成对备份进行解包的过程后/dev/sda1,我的备份中的用户似乎amoghrabi不再拥有其文件(例如/home/amoghrabi/,文件由 拥有liveuser。我相信这是因为/etc/passwdliveCD 上的文件已的 UID1000与 的 UID 相同amoghrabi

这种情况我能做什么?在解压备份之前,我已经尝试将我的文件恢复/etc/passwd到liveCD 环境。这解决了用户主目录属于 的/etc/group问题,但我仍然陷入登录循环,我认为这是由于解皮过程中没有正确权限的原因。amoghrabiamoghrabi

我的最终目标是能够启动/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

相关内容