移动 /usr/lib 而不破坏所有内容

移动 /usr/lib 而不破坏所有内容

我想通过以下方式移动该目录:

sudo mv /usr/lib /tmp/bad_files/
sudo mkdir /usr/lib
sudo mv /tmp/bad_files/lib/* /usr/lib/

我为什么要这样做?

我遇到与文件系统相关的问题并且无法使用fsck修复它们(http://talk.radxa.com/topic/949/how-to-fsck-nand对于那些认为这很奇怪的人)所以我想欺骗 FS 将我无法使用的所有文件移动到某个转储目录中(远离它们造成损坏的地方,因为它们不可读)。

我尝试过,但我无法仅移动有问题的单个文件

/usr/lib → sudo mv ./libpostfix-tls.so.1 /tmp/bad_files/
mv: cannot stat ‘./libpostfix-tls.so.1’: Input/output error

我将使用apt-get install -- reinstall原始包重新安装有问题的文件。

我为什么不直接做呢

如果我做

sudo strace mv ./libpostfix-tls.so.1 /tmp/bad_files/

我看到 mv 命令本身使用,/usr/lib所以我担心我可能会通过这样做杀死我的操作系统

...
open("/usr/lib/locale/C.UTF-8/LC_COLLATE", O_RDONLY|O_CLOEXEC) = 3
...

所以我的问题:我可以安全地移动这个文件夹吗?操作系统和设备信息:

Distributor ID: Linaro
Description:    Linaro 14.04
Release:        14.04
Codename:       trusty
/dev/mtdblock1 on / type ext4 (rw)

答案1

如果您无法关闭系统进行维护,那么在使用系统文件时实际移动它们(如果可能的话)是一项非常艰巨的任务。如果可以把系统停机维护,我可以想到两种方法:

启动救援系统

您将需要从另一个系统启动,可能是救援磁盘或类似 gparted 的东西,然后安装您的根分区并按照您的建议移动 /usr。这是我能看到的最安全的方法,这样您就不会在原始系统实际运行时移动其自己的文件来干扰它。

同一系统:单用户模式+LD_LIBRARY_PATH

如果您出于某种原因没有任何其他系统可以启动,我认为您仍然可以通过以下方式在同一系统上进行启动:

  1. 重新启动系统进入单用户模式(大多数 Linux 发行版上的运行级别 1)

  2. 复制/usr/lib/* 某个安全的地方,比如cp /usr/lib/* /tmp/tmplib/

  3. 设置 LD_LIBRARY_PATH 指向它:假设你有一个 bash shell,你将使用export LD_LIBRARY_PATH=/tmp/tmplib

  4. 按照您尝试的方式移动文件。

免责声明:我没有机会在实时系统上进行尝试,因此请持保留态度,并始终确保您有所有文件的备份。

相关内容