![将 /home 移动到同一驱动器上的不同分区后程序无法运行](https://linux22.com/image/141730/%E5%B0%86%20%2Fhome%20%E7%A7%BB%E5%8A%A8%E5%88%B0%E5%90%8C%E4%B8%80%E9%A9%B1%E5%8A%A8%E5%99%A8%E4%B8%8A%E7%9A%84%E4%B8%8D%E5%90%8C%E5%88%86%E5%8C%BA%E5%90%8E%E7%A8%8B%E5%BA%8F%E6%97%A0%E6%B3%95%E8%BF%90%E8%A1%8C.png)
我正在运行 Arch,并且没有遇到任何困难,直到我将我的主目录移动到同一驱动器上的不同分区。事件的顺序:
- 将其他分区格式化为ext4;将其挂载到/mnt
- 将 /home 的内容移动到 /mnt
- 将新分区添加到fstab,挂载到/home
- 注销,然后重新登录。
- 所有文件占
最初,当我跑步时,我感到有些奇怪startx
。 xauth
尝试锁定超时Xsession
,但这似乎已自行解决。我的主目录中有几个程序(游戏)在移动之前运行良好,但现在根本无法运行。没有错误,没有闪点/打嗝。没有什么。
这是一个strace
:
$ strace ./FTL
execve("./FTL", ["./FTL"], 0x7ffde9035740 /* 29 vars */) = -1 ENOEXEC (Exec format error)
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2997, ...}) = 0
read(3, "# Locale name alias data base.\n#"..., 4096) = 2997
read(3, "", 4096) = 0
close(3) = 0
openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
fstat(2, {st_mode=S_IFREG|0644, st_size=1076, ...}) = 0
write(2, "strace: exec: Exec format error\n", 32strace: exec: Exec format error
) = 32
getpid() = 11516
exit_group(1) = ?
+++ exited with 1 +++
我不确定问题是什么。看起来,如果文件在移动后仍然存在,那么一切都应该没问题。还有其他人看到问题是什么或者对问题可能是什么有其他想法吗?
有几个程序正在执行此操作,但我的主目录中也有其他程序运行得很好。
更新: 我发现了这个问题,但我不明白发生了什么。也许有人可以解释,或者提出一个合理的理论。
搬家并没有我希望的那么顺利,所以我做了很多diff
检查。所有文件都存在(或仅在新分区上),所以我认为我可以继续了。今天查看,发现很多文件都是0字节。
mount /dev/sda6 /mnt
mkdir /mnt/allen
cd /home/allen
mv * /mnt/allen/
# got some "target dir is not empty" errors, so tried rsync
cd ..
rsync -var allen /mnt/
# did extensive diff'ing and file names look good; thumbs up?
sync
umount /mnt/
mount /dev/sda6 /home
这大致就是我所做的。我没看到它横到哪里去了。我现在已恢复并运行,没有任何问题,但如果有人看到导致某些文件为 0 字节的原因,我很乐意学习新的东西。