如何在不合并系统的情况下替换我的主目录?

How can I replace my home directory without coorupting my system?

设置我的 Raspberry Pi 后,我制作了一张图像,以便更轻松地恢复到旧的软件状态。最近我想这样做,所以我保存了我的 /home/pi 文件夹的内容,格式化了 sd 卡并将图像写入其中。

到目前为止一切正常。然后我尝试简单地删除完整的 /home/pi 文件夹并将其替换为我之前从旧图像中保存的文件夹。现在似乎所有文件都在那里。但是它不能正确启动。

有时它会停止启动。然后我可以像终端一样正常使用它,但是桌面没有启动。

那么,我怎样才能以正确的方式替换我的主目录而不会对系统造成任何损坏?

编辑: 我刚刚又试了一次。

  1. sudo cp -a /home/pi/fileserver/backup /home/backup (我在文件服务器中安装了一个网络驱动器。由于网络已打开 windows 我假设所有权限都已在此处消失)
  2. cp -a /home/pi/. /home/original
  3. sudo umount /home/pi/fileserver
  4. rm -r /home/pi/
  5. mv /home/backup /home/pi
  6. sudo chmod -R 755 /home/pi(目前一切正常)
  7. sudo reboot

重新启动后,它不再正确启动。当我等待足够长的时间时,我看到 X 服务器的错误。

这是一种非常值得怀疑的数据归档方法。首先,正如您提到的,windows 将删除权限位。 运行 chmod -R 755 之后会产生非常糟糕的后果,因为某些程序为了工作需要对某些文件进行非常特定的访问位(例如 ssh 密钥)。更不用说让所有内容都可执行对安全性不利。

考虑到您的情况,您可以 a) 将所有内容备份到 Tar 或 Zip 存档中 - 这样权限将完好无损 b) 制作虚拟磁盘文件,该文件将存储在共享 windows 驱动器上并挂载到 /home/pi

场景A怎么做:

cd /home/pi
tar cvpzf backup.tar.gz .

复制backup.tar.gz到共享驱动器

解压:

cd /home/pi
tar xpvzf backup.tar.gz

优点:

  • 单线备份
  • 服用少量 space

缺点:

  • Packing/unpacking需要时间

场景B怎么做:

1) 创建一个新文件来保存虚拟驱动器卷:

cd /mnt/YourNetworkDriveMountPoint
fallocate -l 500M HomePi.img
dd if=/dev/zero of=HomePi.img bs=1M count=500
mkfs -t ext3 HomePi.img

2) 挂载到主目录

mount -t auto -o loop HomePi.img /home/pi/

500 表示磁盘大小为 500 兆字节 这样你的整个 pi 将作为文件保存在 windows 共享驱动器上,但所有内容都将在 ext3 中,因此所有权限都将保留。 我建议您将当前版本的图像文件保存在 Pi 设备本身上,将旧版本保存在共享驱动器上。如果您需要切换,只需复制文件,否则如果所有图像都在共享驱动器上,那么 read/write 性能将 100% 取决于网络速度。

然后您可以轻松地制作此文件的副本,并通过卸载现有映像并安装新映像来立即交换它们

优点:

  • 备份版本之间轻松切换
  • 过程完全透明

缺点:

  • 如果当前图像文件在共享驱动器上,性能将会降低
  • 它将消耗更多 space 因为所有 500 兆都将被预先分配。
  • 由于显而易见的原因,在图像交换期间必须注销 Pi 用户

现在,关于桌面不显示的问题,您需要查看/var/log/Xorg.0.log以获得详细信息。这可能是由混乱的权限引起的。我会尝试 rename/remove 您当前位于 /home/Pi/.config/ 某处的 Xorg 设置和缓存(取决于您使用的是什么 - XFCE、Gnome 等)并让 X 服务器重新创建他们。但同样,在执行此操作之前,请检查 Xorg.0.log 以获取确切消息 - 可能还有另一个错误。如果您需要任何进一步的帮助,请对此答案发表评论