Ubuntu 13.04 x64
我最近在我的 PC 上设置了多个用户(我自己的帐户和另外 3 个标准帐户)
由于我习惯每 6 个月进行一次全新安装,所以我总是喜欢确保我的备份是最新的(我使用的是迪贾·杜普备份工具)
我之前从未从具有多个用户的备份中恢复过,我只是想更清楚地了解它是如何工作的,或者我是否确实做得正确。
我备份的文件夹是 /home,因为它包含每个用户的主文件夹,所以问题是当我进行全新安装(可能是在 10 月,13.10 发布时)并从备份中恢复时,它会创建其他用户帐户吗,还是我必须先创建用户帐户然后恢复。或者我应该为每个帐户单独备份还是做完全不同的事情?
答案1
用户数据库不在 /home 中。如果您采用这种方法,您将丢失(或混淆)文件所有权。每个文件和目录都有一组权限、一个用户 ID (uid) 和一个组 ID (gid)。您的备份工具会保存所有这些,但它不会保存从 uid 到用户以及从 gid 到组的映射,因为所涉及的数字在全新安装时可能会有所不同。您需要备份文件 ,/etc/passwd
以/etc/group
获取这些映射。如果您想备份密码(加密),您还需要文件/etc/shadow
。但是,我不会只恢复这些文件,而是在恢复期间打开它们,并仅使用 ID 来重新创建用户。
$ # one user is in each line. the line for user jb is:
$ grep jb /etc/passwd
jb:x:1002:1002:Jo Bo,,,:/home/jb:/bin/bash
$ # the first 1002 denotes the uid, the second 1002 denotes the gid
$ # let's recreate that user
$ addgroup --gid 1002 jb && adduser --uid 1002 --gid 1002 jb
假设您有一个具有管理员权限的用户,并且是旧系统和新系统上创建的第一个用户(安装期间),并且您没有创建其他组或将用户添加到某些组中,那么这种方法可以完美运行。如果情况并非如此,您必须仔细查看文件版本之间的差异。但这并不难弄清楚,需要做什么。
值得庆幸的是,/etc/shadow
文件中有加密的密码。以下是一行示例代码:
jb:$6$HNJnBSsO$xE8vhxcSPGWbbUxqMRXpWq5Q9RrmwsRgRmn/mwjmQKEQKfI3AsGMyR5F4k7DMZouTXQvEKqcm1t592zKD/L0Q/:15943:0:99999:7:::
之间的长字段:
是加密密码。您可以将其复制粘贴到新文件中。这样您的用户就不必重置密码了。
即使您丢失了所有这些文件,也不会有大麻烦。您只需使用命令重新分配 /home 中的文件即可chown -R <user>: /home/<user>
。这甚至可能是首选方式。
但所有这些都假设您的系统以最简单的方式使用,即没有安装在 /home 之外保存有价值配置工作的软件,用户文件夹内只是相应用户的文件,没有特殊的组分配(两个用户通过一个公共组共享文件)等等 - 或者所有这些都可以轻松地重新创建。
如果您有更复杂的用户/组,并想要正确地转移文件所有权,而且您觉得很幸运,您可以做一个像这样的特技......
find /home -uid <uid1> -print0 | xargs -r0 -- chown <tmpuid1> --
find /home -gid <gid1> -print0 | xargs -r0 -- chgrp <tempgid1> --
....
find /home -uid <tmpuid1> print0 | xargs -r0 -- chown <newuid1> --
find /home -gid <tmpgid1> print0 | xargs -r0 -- chown <newgid1> --
....
结论:
如果您知道自己在做什么/遗漏了什么,那么只需备份 /home 即可完美满足桌面系统的需求。通常,测试灾难策略是个好主意!