我/usr/
想格式化另一个分区。所以,我想将它移到我的根分区上。我尝试跑步
rsync -avzr /usr/ /usr1/
然后我尝试了例如是否/usr1/usr/bin/mv
可行,结果很好。所以我做了 umount -l /usr
目的是更换旧的 usr 驱动器。但是,出了问题,当我尝试/usr1/usr/bin/mv
再次执行时,我发现bash: /usr1/usr/bin/mv: No such file or directory
这很奇怪,因为它确实存在并且是可执行的。我做错了什么吗?有更好的方法来执行此操作吗?
答案1
/usr
如果可以的话重新安装。如果不能,您将需要从救援环境启动。
我认为您没有运行您所描述的命令。我认为您更有可能错过了源中的尾部斜杠,如下所示
rsync -avzr /usr /usr1/ # DO NOT RUN THIS
这将/usr
作为目录名称复制到 中/usr1
,因此/usr/bin/mv
将作为/usr1/usr/bin/mv
.您需要通过消除干预来解决此问题/usr
。
您可以按照以下步骤执行此操作。如果在任何时候您得到的内容与我所描述的不同,请立即停止并报告(在您的问题中)您做了什么以及返回了哪些消息。
cd /usr1 # No output
ls # You should see only 'usr' and 'lost+found'
mv usr/* . # Notice the important trailing dot. No output
rmdir usr # No output
cd /
现在尝试卸载并重新安装
umount /usr
mount --bind /usr1 /usr
如果这有效,您可以更新/etc/fstab
为/usr
从持有旧的设备安装/usr1
,而不是从持有旧的设备安装/usr
,然后在方便的时候重新启动系统。
答案2
在现代 Linux 系统上,大多数可执行文件都使用共享库。查看与命令一起使用的
ldd /usr/bin/mv
特别重要的是动态加载器,例如/lib64/ld-linux-x86-64.so.2
.该路径是硬编码在可执行文件中的,您必须确保加载程序在该路径下可用。
对于其他库,您可以使用LD_LIBRARY_PATH
:
export LD_LIBRARY_PATH=/usr1/lib64
如果您的动态加载器不可用,则可以将 GLIBC 加载器作为可执行文件调用,其他加载器可能支持也可能不支持。
所以你可以用它来调用可执行文件:
LD_LIBRARY_PATH=/usr1/lib64 /usr1/lib64/ld-linux-x86-64.so.2 /usr1/usr/bin/mv
您可能需要调整系统的路径。
答案3
这种咀嚼是你应该做的仅有的从救援环境执行操作,例如从 USB 记忆棒启动安装并使用其工具。至少 Fedora 安装介质可以这样使用,如果您的发行版不能,它们可能会提供某种救援映像。
诊断和解决你造成的混乱也是如此。