드라이버를 병합하려고 할 때 rsync가 내 루트 파일 시스템을 호스로 연결하는 이유는 무엇입니까?

드라이버를 병합하려고 할 때 rsync가 내 루트 파일 시스템을 호스로 연결하는 이유는 무엇입니까?

컴퓨터에서 오랫동안 시도해 보았지만 여전히 이해가 되지 않는 경우 여기에 있는 제안 사항을 기반으로 다음을 시도했습니다.

두 디렉토리를 복사하고 병합하는 방법은 무엇입니까?

드라이버 트리를 Linux 시스템 폴더에 병합하려는 시도의 일환으로:

rsync -aP ./ /

현재 디렉토리에는 일부 등의 폴더가 포함되어 있으며 etc이것이 디렉토리를 병합하는 방법을 고려할 때 드라이버와 구성을 기본 시스템에 병합하여 각각의 작은 하위 디렉토리를 bin고통스럽게 살펴볼 필요가 없기를 바랍니다 . 실행되고 꽤 좋아 보입니다. 그런 다음 효과를 확인하기 위해 평소처럼 입력했는데 끔찍한 결과가 나왔습니다.mkdircpls

sh: ls: not found.

이런.

이제 실제로 Ubuntu 20.04를 로드하고 작동시키려고 하는 이 "시스템"은 내부적으로 병합하는 데 chroot사용하는 동일한 컴퓨터의 기본 Android 설치를 통해 실제로 호스팅 됩니다 rsync. 무슨 일이 일어나고 있는지 확실하지 않습니다. 그런데 이상한 점은 chroot지금 ls(현재 Android 실행 중 ls) 을 종료하고 /bin일반 하위 디렉터리로 실행한 후,아직 거기 있어요!거의 모든 것에서 기대할 수 있듯이. 그런데 이상한 점은 지금 내가할 수 없다 chrootchroot실패 해서 다시 입력하세요

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대상의 파일과 이름이 같은 경우 해당 디렉터리의 현재 디렉터리 A 파일 대상을 덮어썼습니다.

명령을 실행할 rsync때 어떤 디렉터리에 있었습니까 ? 방금 Android 파일 시스템의 일부를 Linux 드라이브의 루트에 복사했는지 궁금합니다. Android는 Linux 커널을 사용하지만 대부분의 서버/데스크톱/노트북 Linux 시스템과 호환되지 않습니다. 둘 사이의 아키텍처는 완전히 다릅니다(예: "x86[_64]" 대 "arm[64]"). 일반적으로 말하면 Android에서 모듈을 가져와서 PC로 옮겨서 작동할 것으로 기대할 수는 없습니다.

시도 결과에 따르면 chrootLinux 시스템이 손상된 것으로 보이지만 큰 문제는 아닙니다. Ubuntu 설치 스크립트를 실행하고 이를 sda/linux 드라이브에 직접 지정하여 설치하는 것이 좋습니다.

마지막으로 "여유 블록 수 오류" 메시지는 e2fsck런타임 시 특정 블록과 inode가 사용 중이어야 함을 나타내는 일부 항목을 보았지만 이를 사용하는 항목을 찾을 수 없어 다시 여유 블록에 추가했음을 의미합니다. 목록.

이게 도움이 되길 바란다.

관련 정보