ext4 파티션의 관련 부분을 식별하는 방법

ext4 파티션의 관련 부분을 식별하는 방법

배경: uboot(및 필요한 경우 사용자 정의 베어메탈 코드)를 사용하여 eMMC에서 ext4 파티션을 복제해야 합니다. 를 사용하여 전체 파티션을 복사한 mmc read결과 대부분의 파티션이 비어 있지만 일부 데이터 블록(예: inode 테이블)이 파티션에 분산되어 있음을 발견했습니다. 이는 전체 파티션을 복사해야 함(너무 느리고 자주 수행해야 함) 또는 파티션의 어느 부분이 관련되어 있는지 확인해야 함을 의미합니다.

이 질문과 가장 유사한 Q&A는 ddcreate a sparse image or piping to that을 사용하는 것을 제안 gzip하지만 저는 OS를 실행하고 있지 않으므로 파일 시스템 레이아웃을 이해해야 합니다. 이러한 비트맵 타일을 사용하여 사용된 콘텐츠와 무료 콘텐츠를 식별할 수 있나요? ext4 문서는 자세한 내용이 나올 때마다 Linux 커널 코드를 참조하는 것 같습니다.

uboot 코드를 사용하여 이 작업을 수행하는 것이 가장 좋지만 uboot에서 실행할 수 있는 일부 베어 메탈 코드를 작성할 수도 있습니다.

경계 조건도 있습니다. 파티션 복제의 대상이 비어 ​​있지 않으므로 원본에 0만 있는 블록이 있고 해당 블록이 0이어야 하는 경우 대상에서 해당 블록을 0으로 덮어써야 합니다.

답변1

사용자 환경에서 원본 파일 시스템을 마운트할 수 없는 경우 이를 사용하여 debugfs파일 시스템 레이아웃과 copy대상 파일을 확인할 수 있습니다. 약간의 작업만으로 debugfs원본 파일 시스템을 나열하고 반복하고 임시 위치에 복사한 다음 이를 사용하여 mke2fs -d새 파일 시스템에 쓰거나 대상 위치에 직접 복사하는 스크립트를 작성할 수 있습니다.

자신만의 코드를 작성하려는 경우 libext2fs를 사용하여 libext2fs파일 시스템을 열고 디렉터리 트리를 읽고 이를 대상 파일 시스템에 반복적으로 복사할 수 있습니다(libext2fs를 사용하여 열 수도 있음). 이것은 ~이 될 것이다많은디스크에서 ext4 형식을 처리하기 위해 자체 코드를 작성하는 것보다 쉽습니다.

귀하의 환경에서 eMMC 장치를 블록 장치로 액세스하는 데 장애가 있는 경우(죄송합니다. ext4 측면만 아는 바가 없습니다.) libext2fs용 사용자 정의 IO 드라이버(예: lib/ext2fs/unix_io.c또는 .../nt_io.c) 를 작성할 수 있습니다. 드라이버는 eMMC 장치에 직접 읽고 쓸 수 있으며 debugfs+scripts 또는 사용자 정의 libext2fs 복사 도구를 사용할 수 있습니다.

답변2

e2image -ar파일 시스템의 관련 부분을 복사하는 데 사용됩니다 . 파일 시스템을 이해하고 사용되지 않는 공간을 건너뛰면서 파일에 사용되는 모든 필수 메타데이터와 데이터 블록을 복사합니다.

관련 정보