busybox를 사용하여 루트 디렉터리 트리 복제

busybox를 사용하여 루트 디렉터리 트리 복제

네트워크 부팅을 위해 TFTP 및 NFS 탑재 루트 파일 시스템을 사용하는 TI DaVinci(OMAP과 유사한 ARM 아키텍처) 기반 시스템이 있고 네트워크 부팅 서버 없이 독립적으로 부팅되도록 하려고 합니다.

기본 접근 방식은 커널 이미지를 NAND 플래시에 복사하고 루트 파일 시스템을 연결된 SATA 디스크에 복사한 다음(NAND 플래시는 전체 시스템에 비해 충분히 크지 않음) NAND 플래시에서 커널을 로드하도록 u-boot를 구성하고 적절한 root=인수를 전달하십시오.

파일 시스템을 복사하는 단계에서 멈췄습니다. 이 문제cp관련이 있지만 및 cpio도구 의 busybox 버전만 있고 --one-file-systembusybox가 해당 옵션을 지원하지 않기 때문에 어떤 제안도 효과가 없었습니다.

busybox에서 제공하는 도구 기능만으로 루트 파일 시스템을 복제하는 방법은 무엇입니까? NFS 서버(Ubuntu를 실행하는 x64 아키텍처)에서 아카이브 생성 명령을 실행한 다음 대상에서 압축을 푸는 것이 도움이 됩니까?

답변1

BusyBox는 find-xdev옵션을 지원하므로 이 방법으로 루트 파일 시스템의 cpio 아카이브를 만들 수 있습니다. tar와 달리 cpio는 디렉터리를 보관할 때 디렉터리의 내용을 보관하지 않습니다.

find . -xdev | cpio -H newc -o |
{ cd /mnt && cpio -m -i; }

장치에서 이미지를 빌드하려는 이유를 잘 모르겠습니다. 개발 머신에서 빌드 스크립트를 사용하여 파일 시스템 이미지를 빌드하고 이미지를 배포하고 싶습니다.

답변2

cp.from을 사용할 수 있다고 생각합니다 .busybox.net 웹사이트:

CP
Usage: cp [OPTION]... SOURCE DEST

           or: cp [OPTION]... SOURCE... DIRECTORY

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Options:

            -a      Same as -dpR
            -d      Preserve links
            -p      Preserve file attributes if possible
            -R      Copy directories recursively

$ cp -a / /mnt/newroot

아스팔트

cp처리할 수 없는 장치가 있다면 BusyBox에도 포함된 장치를 /dev/zero사용할 수 있습니다 .tar

$ (cd /; tar cf - .)|(cd /mnt/newroot; tar pxvf -)

답변3

이를 위해 비지박스의 손상된 도구를 사용하는 것은 가치 있는 것보다 더 문제가 많은 것 같습니다. 왜냐하면 비지박스에는 부족한 단일 파일 시스템 처리가 필요하기 때문입니다 cp. 파일을 개별적으로 복사하고 마운트 지점으로의 반복을 피할 수도 있지만 find, 이렇게 하려면 별도의 프로세스가 많이 필요하고 속도가 매우 느립니다.

NFS 서버에서 파일 시스템을 준비하는 것이 더 실행 가능한 대안입니다. 다음을 fdisk -l사용하여 파티션 크기(바이트)를 계산합니다.

truncate -s N the-root-image
mkf.ext3 the-root-image
sudo mount -o loop the-root-image /mnt/somewhere

이제 연결된 질문에 있는 명령을 사용하여 내용을 복사하세요.

sudo rsync --archive --inplace --hard-links --acls --xattrs --devices --specials --one-file-system --8-bit-output --human-readable --progress path/to/nfs/share /mnt/somewhere

대상이 액세스할 수 있는 네트워크 위치에 이미지를 배치합니다.

sudo umount /mnt/somewhere
mv the-root-image path/to/nfs/share

마지막으로 대상의 이미지를 대상 디스크에 배치합니다.

dd if=/the-root-image of=/dev/sda1 bs=16M

답변4

다음 디렉토리에 설치(또는 바인드 설치)해야 합니다.

mount /dev/mmcblk0p1 /mnt
cd /mnt
tar cjf /otherdisk/archive.tar.bz2 *

결과를 로컬에 저장하는 대신 SSH를 통해(비지박스 구성이 활성화된 경우) 전송하고 대상 호스트의 컴퓨팅 성능/설치된 도구를 사용하여 압축을 수행할 수도 있습니다.

tar cf - * | ssh user@host "bzip2 | cat > archive.tar.bz2"

압축 도구, 아카이브 이름 등을 원하는 대로 조정하세요 :)

관련 정보