为什么 rsync 在尝试合并驱动程序时会软管我的根文件系统?

为什么 rsync 在尝试合并驱动程序时会软管我的根文件系统?

在一台计算机上,我已经尝试了很长时间,但仍然没有完全做到这一点,我根据这里的建议尝试了以下操作:

如何复制合并两个目录?

作为尝试将驱动程序树合并到 Linux 系统文件夹的一部分:

rsync -aP ./ /

当前目录包含一些etcbin等文件夹,我希望,考虑到这是如何合并目录的,它只会将驱动程序和配置合并到主系统中,这样我就不必痛苦地进行操作mkdir以及cp每个小子目录。它跑起来了,看起来还不错。然后我ls像往常一样输入来检查效果并得到了可怕的

sh: ls: not found.

哎呀。

现在这个“系统”实际上是尝试加载并让 Ubuntu 20.04 工作,实际上是通过chroot同一台机器上的 Android 主安装来进行托管的,我使用内部rsync进行合并 - 不确定这是否是发生了什么。但奇怪的是,退出chroot并在 now 上执行ls(现在运行 Android 的ls/bin作为普通子目录后,ls还在那里!正如您所期望的几乎所有其他事情一样。但奇怪的是现在我不能 chroot再次进入它,因为chroot失败了

chroot: exec /bin/sh: No such file or directory

即使从外面chroot,我也可以清楚地看到/bin/sh坐在那里。但更奇怪的是,当我尝试ls外部-请chroot注意,我已将有问题的 rootfs 安装在/mnt/hdd0

127|rk3588_firefly_itx_3588j:/mnt # hdd0/bin/sh
/system/bin/sh: hdd0/bin/sh: No such file or directory

ls hdd0/bin/sh

rk3588_firefly_itx_3588j:/mnt # ls -l hdd0/bin/sh                              
lrwxrwxrwx 1 root root 4 2022-11-28 09:04 hdd0/bin/sh -> dash

文件系统发生了什么?!哦,是的,顺便说一句,dash是的确实存在:

rk3588_firefly_itx_3588j:/mnt # ls -l hdd0/bin/dash
-rwxr-xr-x 1 root root 137728 2019-07-18 18:15 hdd0/bin/dash

是的,Android 没问题;只是chrooted rootfs(顺便说一句,它实际上位于附加的 SSD 上,Android 位于板上 eMMC 上)出了问题。哦,是的,请注意,这个系统,因为它还没有准备好上路,没有有价值的数据,所以这并不是一个很大的损失,但我想看看是否可以在不重新格式化 SSD 和重新加载的情况下恢复文件系统。我做了e2fsck -f /dev/block/sda2一些有趣的结果:

rk3588_firefly_itx_3588j:/mnt # e2fsck -f /dev/block/sda2
e2fsck 1.45.4 (23-Sep-2019)
/dev/block/sda2: recovering journal
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (38957201, counted=38810171).
Fix<y>? y
yes
Free inodes count wrong (9920272, counted=9920042).
Fix<y>? yes

/dev/block/sda2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/block/sda2: 16854/9936896 files (0.2% non-contiguous), 922966/39733137 blocks

不确定“空闲块计数错误”部分暗示或暗示什么。但它做到了不是治愈有病的文件系统。

答案1

出色地,

查看您显示的命令,您要求在存档模式下递归地将所有内容从您所在的文件夹复制到文件系统的根目录,并带有进度条并将部分传输的文件保留在目标中。如果您bin开始所在的目录下有一个目录,那么您将一个bin目录复制到另一个bin目录上...并且,如果原始目录中的任何文件bin与目标中的文件具有相同的名称,则该目录中的现有文件目的地被覆盖。

您发出rsync命令时位于哪个目录?我想知道您是否刚刚将 Android 文件系统的一部分复制到 linux 驱动器的根目录中。请记住,虽然 Android 使用 Linux 内核,但它与大多数服务器/台式机/笔记本电脑 Linux 系统不兼容。两者之间的架构完全不同(例如“x86[_64]”与“arm[64]”)。一般来说,你不能从 Android 中取出一个模块,将其移动到 PC 上并期望它能够工作。

从尝试的输出来看chroot,您似乎确实损坏了 Linux 系统,但这并不是什么大问题。我建议只运行 Ubuntu 安装脚本并将其直接指向 sda/linux 驱动器进行安装。

最后,“空闲块计数错误”消息仅意味着在e2fsck运行时,它看到一些条目表明某些块和索引节点应该正在使用,但找不到任何使用它们的内容,因此它将它们重新添加到空闲块中。列表。

我希望这有帮助。

相关内容