한 드라이브에서 다른 드라이브로 전체 파일 시스템 계층 복사


95

하나의 드라이브에서 다른 드라이브로 전체 파일 시스템 계층 구조를 복사하고 싶습니다. Linux 플랫폼의 일반 파일뿐만 아니라 각 디렉토리의 내용. Linux에 내장 된 함수를 사용하여이를 수행하는 가장 좋은 방법을 알고 있으면 감사 할 것입니다. 파일 시스템은 확장 제품군입니다.


1
음 ...에 대한 사랑은 어디에 dd있습니까? dd if=/dev/sda1 of=/dev/sdb1 bs=4096
juniorRubyist

dd : @juniorRubyist +1 나는 항상 그것을 사용합니다. 그러나 어떤 플래그를 사용해야합니까? 사용 conv=notrunc,noerror,sync합니다.
BeniBela

-1 위해 dd2 이유 : 첫째는 (의 경우와 장착 된 파일 시스템의 블록 레벨 복사를 수행하는 나쁜 생각입니다 /) 둘째 dd소스가 같은 파일 시스템 내에 장착에서 데이터를 복사하지 않습니다 /boot/home.
Eric

답변:


33

나는 자주 사용한다

> cp -ax / /mnt

/ mnt는 / mnt에 마운트 된 새 디스크이고 /에 다른 마운트는 없다고 가정합니다.

-x는 하나의 파일 시스템에 유지합니다.

물론 루트로 또는 sudo를 사용하여 수행해야합니다.

이 링크에는 위의 링크를 포함하여 몇 가지 대안이 있습니다.

http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html


이 죽은 옛 대답은 동안은 아직도 당신이 일반적으로 모든 물건에 제시 복사하지 않는다는 것을 주목할 필요가있다 /제외하고, 즉 /dev, /sys, /proc등 따라서 있음을 발행하기 전에 cp나는 (또한 rsync를 사용하여) 더 나은 접근법를 검색해 보시기 바랍니다
마르신 ORLOWSKI

2
@MarcinOrlowski WolfJM의 -x플래그 사용은 언급 한 합성 파일 시스템이 복사되지 않음을 의미합니다.
짐 L.

192

당신이 원하는 것은 rsync 입니다.

이 명령을 사용하여 폴더를 동기화하고 반쯤 중단되면 복사를 다시 시작할 수 있습니다. 하나의 디스크를 복사하는 명령은 다음과 같습니다.

rsync -avxHAX --progress / /new-disk/

옵션은 다음과 같습니다.

-a  : all files, with permissions, etc..
-v  : verbose, mention files
-x  : stay on one file system
-H  : preserve hard links (not included with -a)
-A  : preserve ACLs/permissions (not included with -a)
-X  : preserve extended attributes (not included with -a)

복사 속도를 향상 시키려면 파일의 델타 / diff 계산을 피하기 위해 -W( --whole-file)를 추가 하십시오. rsync의 델타 전송 알고리즘의 실제 이점은 네트워크 사용을 줄이므로 소스와 대상이 모두 로컬 경로로 지정된 경우 이것이 기본값입니다.

또한 --numeric-ids사용자 / 그룹 이름으로 uid / gid 값을 맵핑하지 않도록 추가하는 것이 좋습니다.


1
천재, 고마워 Btw, 나는 결국 사용 rsync -avxHAWX --numeric-ids --progress / mnt/했지만 끝내야했다 rsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out. 출력을 터미널에 쏟아 부으면 프로세스 속도가 느려질 것입니다. : D
Chris K

28
--info=progress2대신 --progress개별 파일 (수백만 줄) 대신 전체 진행률을 제공하므로 대량 전송에 유용합니다.
Florian

3
나는 대체했다 XA함께 E확장 속성과 ACL을 적용하고 있기 때문에, E내 Mac에서. 테스트 :rsync version 2.6.9 protocol version 29
조나단 코 마르

1
추가하여 > ~/rsync.out, 2> ~/rsync.err별도의 파일에 오류를 저장합니다.
Aneel

2
당신이 다른 폴더에서보다 복사하는 경우 /, 소스 디렉토리에 후행 슬래시를 가진 (여부를) 차이가 있습니다 : rsync source/ dest/복사 모든 것을 내부 source/dest/, 잠시 rsync source dest/복사 폴더 source내부에 모든 것을 dest/.
세미 외부

45

Michael Aaron Safyan의 답변은 스파 스 파일을 설명하지 않습니다. -S옵션은 그것을 수정합니다.

또한이 변종은 각 파일이 진행되는 동안 스팸을 일으키지 않으며 델타 동기화를 수행하지 않아 네트워크 이외의 경우 성능이 저하됩니다.

한 로컬 드라이브에서 다른 로컬 드라이브로 파일 시스템을 복사하는 데 적합합니다.

rsync -axHAWXS --numeric-ids --info=progress2

1
놀랄 만한. 이것은 정말 좋은 일입니다
Gildas

1
이것은 받아 들여지는 대답이어야하며 훌륭하게 작동합니다. 예55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
Drew

1
<3 완벽하다
Tim Strijdhorst

6

한 드라이브에서 다른 드라이브로 한 번의 로컬 사본을 얻으려면 위의 Wolfmann이 설명한 것처럼 cp가 충분하다고 생각 합니다.

예를 들어 로컬 또는 원격 백업과 같은 더 큰 작업의 경우 rsync 가 가장 좋습니다 .

물론 rsync는 사용하기가 훨씬 더 복잡합니다.

왜 rsync인가 :

  • 이를 통해 드라이브 A의 전체 또는 일부를 드라이브 B에 복사 (동기화 복사) 할 수 있으며, 일부 디렉토리는 사본에서 제외 (예 : / proc 제외)와 같은 많은 옵션이 있습니다.

  • 또 다른 큰 장점은이 기본 도구가 파일 전송을 모니터링한다는 것입니다. 예를 들어 대량 전송의 경우 연결이 중단되면 중단 점에서 계속됩니다.

  • 마지막으로 rsync는 ssh 연결을 사용하므로 원격 동기화 보안 "복사본"을 얻을 수 있습니다. 몇 가지 예맨 페이지여기를 참조하십시오 .


4

Michael Safyan이 위에서 제안한 것처럼 rsync이 목적으로 사용 했습니다. 복사하지 않으려는 디렉토리를 제외시키기 위해 몇 가지 추가 옵션을 사용하는 것이 좋습니다.

이 버전은 Gnome 및 Debian / Ubuntu 기반 시스템에 상당히 특정한데, 그 이유는 APT 패키지 캐시뿐만 아니라 Gnome에 특정한 사용자 홈 디렉토리의 서브 디렉토리도 포함하기 때문입니다.

마지막 행은 제외됩니다 어떤 일부 용도에 너무 공격적 수 있습니다 캐시 / 캐시 / .cache라는 이름의 디렉토리를 :

rsync -WavxHAX --delete-excluded --progress \
  /mnt/from/ /mnt/to/
  --exclude='/home/*/.gvfs' \
  --exclude='/home/*/.local/share/Trash' \
  --exclude='/var/run/*' \
  --exclude='/var/lock/*' \
  --exclude='/lib/modules/*/volatile/.mounted' \
  --exclude='/var/cache/apt/archives/*' \
  --exclude='/home/*/.mozilla/firefox/*/Cache' \
  --exclude='/home/*/.cache/chromium'
  --exclude='home/*/.thumbnails' \
  --exclude=.cache --exclude Cache --exclude cache

2

사이퍼 변경 및 사용 : rsync를 재 스레드에 유용한 두 비트를 추가 --update:

Wolfman의 게시물에 따르면 cp -ax우아하고 현지 물건에 시원합니다.

그러나 rsync굉장합니다. Michael의 답변에 더하여 -W, 암호화를 변경하면 속도가 빨라질 수 있습니다 (보안 관련 내용을 읽으십시오).

rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx

논의 (벤치 마크) 실제 병목되는 속도가 느린 CPU에 대한 장소 주위는하지만 기계가 다른 동시 일을 업로드 할 때 나를 도와 보인다.

이와 같이 큰 재귀 복사본에서 rsync를 사용하는 다른 큰 이유 중 하나는 -u 스위치 (또는 --update ) 때문입니다. 복사하는 동안 문제가 발생하면 문제를 해결할 수 있으며 rsync는 중단 된 부분을 선택합니다 (scp에 이것이 있다고 생각하지 않습니다). 로컬에서 수행하는 cp에는 -u 스위치도 있습니다.

(--update와 --whole-file의 의미가 무엇인지는 확실하지 않지만 항상 이러한 유형의 작업에서 나에게 현명하게 작동하는 것처럼 보입니다)

나는 이것이 rsync의 기능에 대한 스레드가 아니라는 것을 알고 있지만 이것에 가장 일반적으로 사용하는 것은 다음과 같습니다.

  • 새로운 시스템을 원래 위치 또는 이와 유사한 것으로 다시 동기화하려면 --delete-after 등 (Michael이 후속 조치에서 언급 한 것처럼). 과,
  • --exclude- 디렉토리 / 파일을 건너 뛰는 경우 (예 : 사용자 홈 디렉토리를 건너 뛰거나 다른 곳에서 집을 마운트하거나 새 사용자를 만드는 등) 새 장소에 새 시스템을 복사 / 만들기 등

우연히, 창을 사용해야하는 경우 탐색기의 rsync를 사용하여 처음부터 시작하려는 약간 두뇌가 죽기 때문에 큰 재귀 사본을 수행합니다 (Finder는 OS X가 더 나쁘지만)



2

juniorRubyist의 의견에서 언급했듯이 여기서 선호되는 접근 방식은을 사용하는 것 dd입니다. 주된 이유는 성능 때문입니다. 파일 단위가 아니라 블록 단위 복사본입니다.

파티션 복제

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

전체 디스크 복제

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

참고 문헌

  1. https://wiki.archlinux.org/index.php/disk_cloning

dd마운트 된 파일 시스템의 블록 레벨 복사를 수행하면 (예의 경우 /) 대상 파일 시스템 오류가 발생할 가능성이 높으며, 두 번째 dd이유는 마운트 된 소스의 데이터를 복사하지 않습니다. 같은 파일 시스템 /boot/home. 링크는 "파일 계층 구조"복제가 아닌 디스크 복제에 유효합니다
Eric

1

'dd'는 훌륭하지만 ddrescue (apt install gddrescue)가 더 좋습니다. dd가 중단되면 다시 시작할 수있는 방법이 없습니다 (rsync를 사용해야하는 또 다른 이유). ddrescue를 로그 파일과 함께 사용하면 복사 된 블록을 추적합니다.

이중 부팅 Windows / Linux 시스템을 백업 할 때 Windows 파티션에는 ntfsclone을, Linux 파티션에는 ddrescue를, MBR에는 dd를 사용합니다. (GPT / UEFI를 사용하여 이중 부팅 시스템을 백업하지 않았습니다.)

내가보고 싶은 것은 할당되지 않은 공간이 제어 문자로 표시된 ntfsclone과 같은 파일을 만들 수있는 ddrescue 도구입니다. 따라서 이미지를 직접 마운트 할 수 없지만 포함 된 데이터만큼 커질 수 있습니다.

누군가 ddrescue를위한 ntfsclone "특별 이미지 형식"을 생각해 보시기 바랍니다.


0

rsync 위에서 설명한 완벽한 솔루션입니다.

도커 장치 매퍼 볼륨 또는 이와 유사한 사본이있는 경우 "스폰 파일을 효율적으로 처리-S "에 추가하고 싶습니다 .


0

여기서 제안한 rsync 명령을 시도했지만 결국에는 더 깨끗하고 빠른 결과를 얻었습니다 partclone. 소스 및 대상 파티션을 마운트 해제 한 후 다음을 실행하십시오.

partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)

다음 단계를 수행합니다.

  1. 파티션 복제 (사용 된 부분 만)
  2. 파일 시스템이 정상인지 확인하십시오 (resize2fs가이 단계를 시행함)
  3. 새 파일 시스템으로 파티션 크기를 조정하십시오

위의 내용은 대상 파티션의 크기가 소스와 같거나 큰 경우에 적용됩니다. 대상이 소스보다 작지만 (모든 데이터에 적합) 다음을 수행하십시오.

e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)

resize2fs -M 데이터를 복제하기 전에 파일 시스템을 최소 크기로 줄입니다.

참고 partclone대부분의 시스템에 기본적으로 설치되어 있지 않습니다. clonezilla 와 같은 라이브 배포판을 사용 하거나 배포판 패킷 관리자 ( apt-get install partclonedebian 기반 sytsem) 에서 partclone을 설치하십시오 .

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