어떻게 파일 시스템을 그대로 복사 할 수 있습니까?


10

프로그래밍하려는 장치의 파일 시스템이 있는데 정확한 사본을 만들고 싶습니다. 이상적으로는이 사본을 복사 한 폴더와 동일하게하고 싶습니다. 내가 사용하는 시도 cp -r cp -arsync -azvP이를 달성하려고. 각각은 크기가 다른 폴더를 사용 du -s하고 (을 사용하여 ) 궁극적으로 내 장치가 원래 폴더에서 실행 되더라도 복사 한 폴더에서 실행되지 않습니다.

  • 내가 사용한 명령이 설명되지 않은 것은 무엇입니까?
  • 파일 시스템 / 폴더를 복사 할 때 모든 것을 동일하게 유지할 수 있습니까? 그렇다면 어떻게해야합니까?

추신 : 나는 StackOverflow에 비슷한 질문을 게시 했지만 잘못된 교환에서 질문했다는 것을 빨리 깨달았습니다.


편집 : 이것은 도움이되지는 않지만 복사 된 디렉토리를 사용하는 방법에 관계없이 항상 다음과 같은 출력으로 문제의 시스템을 커널 패닉으로 만듭니다.

VFS : 플로피를 시도하면서 NFS를 통해 루트 fs를 마운트 할 수 없습니다. VFS : 루트 장치 "nfs"또는 unknown-block (2,0)을 열 수 없습니다 올바른 "root ="부팅 옵션을 추가하십시오. 사용 가능한 파티션은 다음과 같습니다. 1f00
64 mtdblock0 (드라이버?) 1f02 64 mtdblock2 (드라이버?) 1f04 2432 mtdblock4 (드라이버?) 1f05 128 mtdblock5 (드라이버?) 1f06 4352 mtdblock6 (드라이버?) 1f07 204928 mtdblock7 (드라이버?) 1f08 50304 mtdblock8 (드라이버?) 0800
8388608 sda 드라이버 : sd 커널 패닉-동기화되지 않음 : VFS : 알 수없는 블록에 루트 fs를 마운트 할 수 없음 (2,0)


5
du출력 의 차이 는 내용이 동일하지 않다는 표시가 아닙니다.
Ignacio Vazquez-Abrams

복사 한 디렉토리를 사용하여 장치가 부팅되지 않습니다. 나는 이것을 지표로 삼아 복사 된 파일 시스템이 동일하게 취급되지 않는다는 것을 정확히 무엇인지 궁금해합니다
TopGunCoder

수행하려는 작업을 정확하게 지정해야합니다. rsync -a또는 cp -a디렉토리의 정확한 사본을 수행하지만 부트 가능한 디스크를 복사하려는 경우이를 완료하기 위해 몇 가지 추가 작업을 수행해야합니다.
forcefsck

1
어떤 종류의 장치? 어떤 종류의 파일 시스템입니까? 어떤 종류의 저장 매체?
michas

1
나에게 그것은 마치 dd if=/some/location of=/some/other/location bs=4M데이터를 읽고 쓰는 것과 같은 것을 사용하고 싶은 것처럼 들린다 .

답변:


12

나는 일반적으로 다음 대안 중 하나를 사용합니다.

  • rsync -aHAX(자세한 내용은 v를 추가하십시오) 복사하는 동안 대상 폴더의 모든 링크 구조와 x-attrs를 유지해야합니다. 잊지 말고 a아카이브는 이미 시간, 소유권 및 권한을 보존합니다.
  • 단순함 tar cvf(시간을 절약하기 위해 압축하지 말고 그냥 타르십시오)은 첫 번째 이유가 어떤 이유로 든 필요한 것을 충족시키지 못하고 시간이없는 경우 항상 사용하지만 항상 첫 번째 것을 시도합니다.

모든 것이 제대로되었는지 확인하기 위해 diff -r <folder1> <folder2>원하는 경우 나중에 실행할 수 있습니다 .


1
이 트릭을했다! 또한 부팅하는 장치 (NFS를 통해)가 꺼져 있고 복사가 진행되는 동안 파일 시스템에 액세스 할 수 없는지 확인해야했습니다.
TopGunCoder

1
아, 읽기 / 쓰기 액세스 권한이있는 NFS 클라이언트는 때때로 문제를 일으킬 수 있습니다!
bayindirh

3
-S가 없으면 스파 스 파일을 복사하지 않습니다. 그것은 du -s차이의 일부일 수 있습니다 . 나는 rsync -axXSAH모든 것을 복사하는 데 사용 됩니다. -x는 파일 시스템 내에서만 복사하며 다른 파일 시스템에서 마운트 된 파일은 복사하지 않습니다.
빅터 Roetman

-숫자 ID는 어떻습니까?
0x2207

@ 0x2207 사용자가 다른 시스템에서 다른 숫자 ID를 가지고있는 경우에만 유용합니다 (예 : 사용자 hbayindir은 두 시스템에 있으며 소스에는 UID 1000, 대상에는 1536). UID 및 GID가 아닌 실제 소유자를 유지해야하기 때문에 해당 옵션을 사용하지 않아도됩니다. 사용자가 소스 또는 대상이 없으면 숫자 ID가 대체로 사용됩니다.
bayindirh

4

루트 폴더를 복사하려고 시도한 것 같은 소리로 주석에서 회신을 읽습니다 ( "복사 된 디렉토리를 사용하여 내 장치가 부팅되지 않습니다"). 이 경우 몇 가지해야 할 일이 있습니다.

$ cd /
$ mkdir backups

$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys \
     --exclude=dev/pts --exclude=backups .

루트 폴더를 새 시스템에 복사 한 후에는 부팅하기 전에 grub을 업데이트해야합니다.

$ grub-install --recheck /dev/sdX (Where X is the partition number)
$ update-grub

+1 단서가 OP의 부팅 메시지에 실패했다고 생각합니다.
msw

그것이 이것과 매우 비슷한 것으로 밝혀졌습니다. 컴퓨터에서 복사해야하는 파일 시스템 (FS)을 다루고있었습니다. 그것은했다 모두에 나를 위해이었다 tar c다음 tar x그것. 키커는 내 컴퓨터에 로컬 인 FS를 사용하여 부팅했지만 내 부팅중인 장치에 원격 (NFS를 통해 장치를 시작하고 있음)을 사용하여 부팅 한 이후 내 컴퓨터가 꺼져 있는지 확인하는 것이 었습니다.
TopGunCoder

grub-install: error: embedding is not possible, but this is required for cross-disk install.
Vitaly Zdanevich가

2

FSArchiver을 사용해 볼 수 있습니다. 현재 유지되지 않은 유사한 부분 이미지의 후속 작업입니다. 과거에는 partimage와 FSArchiver를 모두 사용해 왔으며 둘 다 잘 작동했습니다. 내가 아는 한, 둘 다 가능한 한 원본과 거의 동일한 파일 시스템의 사본을 만듭니다. FSArchiver가 partimage보다 조금 더 강력하다고 생각합니다. 예를 들어, ext4에서는 작동하지만 partimage는 작동하지 않습니다. FSArchiver / partimage 비교표를 참조하십시오 .


2

du폴더를 비교하기 위해 사용 하는 것은 본질적으로 번거 롭습니다. 크기를 기준으로 두 디렉토리를 실제로 비교하려면 다음 du과 같이 사용 하십시오.

$ du -sh --apparent-size <dir>

이 스위치는 실제 드라이브 매체에 저장 될 때 사용하는 디스크 공간 크기와 디렉토리의 크기를보고합니다. 디스크는 블록으로 구성되며 파일은이 블록에 기록됩니다. 파일에 BLOCK + 1의 공간 만 필요한 경우 2 개의 BLOCKS에 해당하는 공간이 소비되며 이는 du일반적으로보고하는 것입니다. 도구 이름은 디스크 사용량이라는 것을 기억하십시오!

전체 파일 시스템과 같은 소리를 처리 dd한다고 가정하면 디렉토리가있는 파티션의 정확한 사본을 만드는 데 사용 하는 경향이 있습니다 .

$ dd if=/dev/sda1 of=/srv/boot.img

그런 다음이 boot.img를 사용 하여 원하는 곳에서 파티션을 복원 할 수 있습니다 .

$ dd if=/srv/boot.img of=/dev/sdb1

du는 디스크의 크기도보고하므로 스파 스 파일과 하드 링크는 공간을 덜 차지합니다. 예를 들어, du -sh /var21G du -sh --apparent-size /var는 내 시스템에서 209G를 제공합니다.
빅터 Roetman

0

"동일한"이라는 의미에 따라 조금씩 다릅니다.

  • 그냥하는 것만으로도 rsync대부분 괜찮을 것입니다. 때로는 tar파일의 모든 것을 압축하여 다른 곳에서 추출 하려고 할 때가 있습니다 .
  • 완전한 파일 시스템의 복제본을 원한다면 dd전체 파일 시스템 자체를 복사하는 데 사용할 수 있습니다 .

장치를 디버깅 할 수단이 있다면 현재 실행되지 않는 이유가 정확히 무엇인지 알아보십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.