在一台计算机上,我已经尝试了很长时间,但仍然没有完全做到这一点,我根据这里的建议尝试了以下操作:
作为尝试将驱动程序树合并到 Linux 系统文件夹的一部分:
rsync -aP ./ /
当前目录包含一些etc
、bin
等文件夹,我希望,考虑到这是如何合并目录的,它只会将驱动程序和配置合并到主系统中,这样我就不必痛苦地进行操作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 没问题;只是chroot
ed 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
运行时,它看到一些条目表明某些块和索引节点应该正在使用,但找不到任何使用它们的内容,因此它将它们重新添加到空闲块中。列表。
我希望这有帮助。