현재 작동중인 드라이브의 드라이브 이미지를 가져 오는 것이 안전합니까?


12

하드 디스크를 백업해야합니다. dd이미지를 사용하여 외부 하드 디스크에 넣고 싶습니다 .

  • ddhdd 자체에있는 OS 에서이 작업을 수행 할 수 있습니까? 아니면 다른 장치 (예 : LiveCD)에서 부팅해야합니까?
  • 장치가 장착되어 작동하는 경우 일반적으로 장치의 이미지를 찍는 것이 안전합니까?
  • 장치가 마운트되었지만 dd실행중인 다른 I / O 작업이없는 것이 확실 합니까?

rsync백업, 특히 증분 백업에 사용하기에 가장 적합한 도구 라고 확신 합니다.

그러나 dd다른 저장 장치도 백업하고 파티션되지 않은 공간에 저장된 데이터도 복사하기 때문에에 관심이 있습니다. 예를 들어, 전자 책 리더는 분할되지 않은 공간을 사용하여 uboot, 커널 및 기타 데이터를 저장합니다.


어떤 파일 시스템을 사용하고 있고 어떤 것이 중요합니까? 일부에는이 작업을위한 특정 기능이 있습니다.
Vality

답변:


11

일반적으로 안전하지 않습니다. FS는 작업이 특정 순서로 작성되어 파일의 새 데이터를 작성한 다음 다른 데이터에서 포인터를 만들 수 있다고 가정합니다. 정확한 세부 사항은 파일 시스템에 따라 다릅니다. 다음과 같은 상황이 발생한다고 상상해보십시오.

  1. dd 가비지 또는 일부 데이터가 포함 된 X 위치에서 읽습니다.
  2. 파일 시스템이 X 위치에 씁니다
  3. 파일 시스템이 위치 X에 쓰기 위치 1에 대한 포인터
  4. dd 위치 X + 1 링크에서 위치 X로 읽습니다.

백업 관점에서 가비지 데이터를 얻습니다. 그러나 몇 가지 해결 방법이 있습니다.

  • 파일 시스템 특정 명령으로 파일 시스템 고정 ( xfs_freeze하나는 믿고 다른 것을 알지 못하지만 그러한 옵션은 적어도 이론적으로 존재합니다)
  • lvm 스냅 샷을 작성하고 복사하십시오. 컴퓨터를 재부팅하면 (HDD 순서를 뺀) 사본이 더러워 지므로 파일 시스템이 더러워 지지만 사본은 원 자성이됩니다. XFS와 같은 일부 파일 시스템은 먼저 동결해야합니다.
  • 다른 사람들이 제안한대로 rsync를 사용하십시오. 이제 사본은 안전하고 LVM이 필요하지 않지만 사본은 원자 적이 지 않습니다. 따라서 파일 시스템 수준에서 위의 문제를 피하는 동안 여전히 파일 문제가 발생할 수 있습니다 (물론 mv는 백그라운드에서 실행되는 동안 누락 된 파일을 상상할 수 있습니다)
  • btrfs , tux3 , zfs , nilfs 와 같은 스냅 샷과 함께 파일 시스템을 사용하십시오 . 그러면 두 가지 문제를 피할 수 있습니다. 완전한 원 자성을 갖는 rsync로 스냅 샷을 작성하고 복사 할 수 있습니다. 그러나 이러한 파일 시스템은 종종 실험적인 경향이 있습니다.

마지막으로- dd가장 좋은 백업 방법이 아닐 수도 있습니다. '쓰레기'를 복사 할 때 종종 낭비되는 전체 디스크를 복사합니다. 디스크 이미지가 필요한 경우 partimage 와 같은 것이 더 좋습니다. 더 나은 옵션이 없다면 rsync, 차등 / 증분 모드 등의 tar 또는 bacula , tarsnap 또는 다른 많은 시스템 중 하나 와 같은 전체 백업 시스템 을 사용하는 것입니다. 데이터 중복 제거는 백업 크기에 큰 영향을 줄 수 있습니다.


1
+1 이것은 실제로이 질문에 대한 답변을 시도하는 유일한 답변이며, op가 요청한 내용을 실제로 읽고 dd가 어떻게 나쁜지에 대해 뛰지 않기 위해 훌륭하게 수행됩니다.
Vality

좋은 답변을 얻으려면 +1하십시오. 그러나 나는 목장에 동의하지 않습니다. Dd는 나쁘지 않습니다. 이것은 부적절하며 왜 그런지 설명하는 것이 좋습니다.
Hennes

글 머리 기호 4는 # 2와 동일한 제한이 있습니다. 응용 프로그램이 쓰기 작업을 수행하는 중일 수 있으며 스냅 샷은 응용 프로그램 수준 트랜잭션을 전혀 모릅니다.
벤 Voigt

감사합니다. 질문에 대답합니다. goldilocks의 답변도 훌륭하지만 내 hdd뿐만 아니라 다른 저장 장치를 백업하는 데 관심이 있으며 이전에 작성해야했을 수도 있습니다.
Marco Sulla

@ BenVoigt-어느 정도 확장하면 하나의 레이어 (파일 시스템)가 제거되고 AFAIK는 '보다 취약합니다'. 여전히 일부 경우 반으로 작성된 파일을 찾을 수 있지만 응용 프로그램이 해당 파일을 처리하지 않으면 파일은 다른 많은 환경 (OOM, 충돌 등)에서도 손상 될 수 있으므로 올바르게 작성된 응용 프로그램은 해당 파일을 처리해야합니다.
Maciej Piechotka

7

파티션의 용도와 사본의 용도에 따라 다릅니다. 그러나 일반적으로 dd파일 시스템을 백업하는 데 부적절한 도구 라고 말할 것입니다 . 그것도 의도 된 것이 아닙니다.

  • 파티션의 빈 섹션을 복사하는 데 많은 시간이 소요됩니다.

  • 파일 시스템이 현재 마운트되어 있으면 부분적으로 OS 수준 엔터티이고 기본 블록 장치와 동기화되지 않았기 때문에 불일치가 발생할 수 있습니다. sync프로세스가 즉각적이지 않기 때문에 처음에 전화하는 것이 도움이되지 않습니다.

cp -a또는 rsync대신 사용하십시오 . 물론 대상 파티션을 생성해야하므로 드롭 데드가 쉽지는 않지만 훨씬 안전하고 유연합니다. 파일 시스템 이미지 를 만들어야하는 경우 아래를 참조하십시오.

루트 파일 시스템을 복사하려는 경우 절대로 사용하지 마십시오 dd. copy에 포함되어서는 안되는 것들이 많기 때문에 rsync -ax(또는 cp -ax개별 최상위 디렉토리) 와 같은 것을 사용해야합니다 . Linux의 경우 다음이 포함됩니다.

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

이들 중 일부는 실제로 커널 인터페이스이며 디스크의 실제 디렉토리가 아닙니다. 복사하면 사본에 적용되지 않는 많은 정보가 복사됩니다. 시스템을 사용하려고 시도하면 실제 인터페이스가 맨 위에 마운트되므로 공간을 낭비하게됩니다. 다른 프로세스에는 프로세스를 실행하여 사용중인 임시 정보가 포함되어 있으며, 문제가 발생하면 더 많은 문제가 발생합니다. 복사하면 시스템에서 가비지를 분류 할 수 없기 때문입니다.

루트 파일 시스템 (또는 모든 파일 시스템)의 이미지 파일을 만들려면 빈 이미지 파일을 만드십시오 dd.

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

1024MB 이미지 (1000000 * 1024)입니다. count다른 크기를 원하면 조정 하십시오. 예를 들어 ext파일 에 파일 시스템 만듭니다 .

mke2fs whatever.img

이것은 실제 블록 장치가 아니라고 경고합니다. 발하다. 이제 이미지 파일을 마운트하십시오 :

mount whatever.img /mnt/img

/mnt/img존재해야하지만 무엇이든 할 수 있습니다. 이제 rsync(또는 cp -a)에 들어갈 수 있습니다 /mnt/img. whatever.img마운트를 해제해도 내용은 그대로 유지 됩니다.

하나...

명확하게하기 위해 어떤 이유로 든 이미지 파일이 절대적으로 필요한 경우 방금 설명한 파일 시스템 이미지 방법 만 사용하십시오. 파티션을 다른 하드 드라이브에 복사하는 것이 목표라면 이미지가 필요하지 않습니다 . 해당 드라이브에 빈 파일 시스템이있는 새 파티션을 만들고 마운트 한 다음 여기에 복사하십시오. 대신 파일 시스템 내용을 빈 디렉토리에 넣고 보관할 수 있습니다.

tar -czf myarchive.tar.gz [the directory path]

그런 다음이를 최상위 레벨에 배치하고 다음을 사용하여 기존 (빈 또는 다른) 파티션에 배치 할 수 있습니다.

tar -xzf myarchive.tar.gz

경로가 아카이브의 경로와 일치하면 기존 파일을 덮어 쓰게됩니다. 그렇지 않으면 기존 디렉토리 계층을 동일하게 유지합니다.


빈 이미지 파일에 +1하는 것은 매우 매끄럽지 만 .tar 또는 .tgz 아카이브에 저장하는 것보다 어떤 이점이 있습니까?
Creek

@Creek 이미지를 마운트 할 수 있다는 것 외에는 어떤 이점도 없습니다. OP의 목표가 원시로 사용될 수있는 이미지를 생성하는 것이라면 추가했습니다. 그렇지 않으면 아카이브의 크기가 고정적이지 않으므로 아카이브를 사용하는 것이 좋습니다. 그것에 대해 더 분명한 경고를 추가하겠습니다.
goldilocks

알았어요. 파일을 저장하는 멋진 방법입니다.
Creek

2
@mpy GNU coreutils cp와 rsync에는 -x다른 파일 시스템으로의 재귀를 피할 수있는 옵션 이 있습니다. Maciej의 답변dd 은 여기에 절대적으로 부적절한 이유를 가장 잘 설명합니다 (사본 중에 다른 쓰기가 있기 때문에 Mark에 나열된 예방 조치를 취하지 않으면 사용할 수없는 사본을 생성하는 것이 거의 보장됩니다 ).
Gilles 'SO- 악한 중지'

2
dd디스크의 실제 디렉토리가 아닌 것을 복사하지 않으므로 첫 번째 지점이 어디인지 확실하지 않습니다. 예를 들어에 마운트 된 /mnt노드, 노드 /proc등은 dd디스크에없는 데이터를 가져 오는 데이터의 일부가 아닙니다 . 마운트 해제 된 파일 시스템의 dd경우 완벽하게 유효합니다. 당신은 정확한 복제본으로 끝납니다. 마운트 된 파일 시스템에 부적합한 유일한 이유는 시스템의 데이터 dd가 작동 하는 데 오랜 시간 동안 변경되거나 부분적으로 기록 될 수 있기 때문 입니다.
Jason C

1

rsync는 파일 시스템을 백업하기 위해 선택하는 도구이며 현재 실행중인 OS의 부팅 가능한 백업을 만들 수 있습니다.

몇 가지주의 사항 :

  • 적절한 알파벳 수프 옵션을 추가해야합니다
  • 경로는 다소 중요합니다
  • 제외 목록이 필요하며 각 OS 및 가능하면 각 구성에 따라 다릅니다.

tar와 같은 다른 방법에 비해 rsync의 장점은 다음과 같습니다.

  • 언제든지 백업을 중지하고 시작할 수 있습니다
  • 요청시 삭제, 이전 삭제, 이동 등 대체 된 파일을 처리하기위한 많은 옵션
  • 재개 된 (또는 반복되는) 백업은 이전에 복사 한 파일을 건너 뛰기 때문에 다른 방법보다 훨씬 빠릅니다. (20 배 속도 증가가 일반적 임)
  • --link-dest 옵션은 실제로 새 파일 만 복사하면서 버전이 지정된 백업을 만들 수 있습니다

이미지 백업은 적절한 위치에 있지만 문제를 포함하여 드라이브를 그대로 그대로 복사합니다. 파일 백업은 새로운 디렉토리를 만들고 프로세스에서 드라이브를 선형화 (조각 모음)하는 부작용이 있습니다. 현재 OS와 동일한 10 개의 사본을 만들려면 사본 마스터에 rsync를 사용하고 나머지는 dd (또는 유사)를 사용합니다.


1

"현재 작업 시스템"의 의미에 따라 다릅니다. 부팅 디스크를 사용하지 않고 컴퓨터에서 실행되는 서비스 중단을 신경 쓰지 않으려면 다음이 가능합니다.

  1. 중요하지 않은 모든 프로그램을 종료하십시오 (기본적으로 작업중인 루트 쉘을 제외한 모든 것-X 터미널에서 시도하지 말고 실제 콘솔 쉘을 사용하십시오). 단일 사용자 모드가 도움이 될 수 있습니다.
  2. 시스템 루트 이외의 디스크를 마운트 한 경우 마운트 해제하십시오. / proc, / sys 또는 / dev와 같은 가상 파일 시스템을 마운트 해제하지 마십시오.
  3. 나머지 디스크에서 캐시 된 데이터를 비 웁니다. sync
  4. 루트 파일 시스템을 읽기 전용으로 다시 마운트하십시오 mount -o ro /.
  5. 외장 하드 드라이브를 마운트하십시오 (아마도 쓸 수 없다는 경고가 나타납니다 /etc/mtab. 무시하십시오).
  6. 백업하십시오.
  7. 외장 하드 드라이브를 마운트 해제하십시오.
  8. 재부팅하십시오. 시스템이 엉망이되어 시스템을 다시 부팅하는 것이 가장 빠른 방법입니다.

이 방법을 사용하여 방금 업그레이드 한 컴퓨터의 아카이브를 만들고 더 많이 사용할 것으로 예상하지 않습니다. 시스템을 활발하게 사용하는 방법은 좋지 않습니다. 느리거나 (몇 시간 또는 며칠) 백업이 거대하므로 (몇 개 이상을 유지할 수는 없음) 백업되는 시스템의 사용을 엄청나게 방해합니다 쪽으로. 일상적인 백업의 경우 파일 시스템 수준에서 작동하는 것을 권장합니다 (예 :) rsnapshot.


4 단계는 읽기 전용 모드에서도 쓰기 때문에 일부 파일 시스템에서는 위험 할 수 있습니다. 또한 현대 시스템에 당신은 단지 링크 할 수 있습니다 (리눅스는 내가 보라 3.something) /etc/mtab/proc/self/mount당신은 chroot 해 또는 FS 네임 스페이스와 같은 일이있을 때조차 일 것이다 -.
Maciej Piechotka

1
@MaciejPiechotka 읽기 전용 모드로 마운트 되는 동안 쓰는 파일 시스템을 알지 못 하므로 매우 이상합니다. 일부 파일 시스템은 쓰기를 할 장착시 파일 시스템이 이전에 정상적으로 마운트 해제, 단계가 있도록 아닌 경우 읽기 전용 모드로 mount -o remount,ro /쓸 수 있습니다. 그러나이 명령이 반환되면 어떤 상황에서 후속 쓰기가 발생합니까?
Gilles 'SO- 악한 중지'

“비 필수 프로그램”을 종료하려면 로깅 서브 시스템이 반드시 포함되어야합니다.
Gilles 'SO- 악한 중지'

@Gilles는 부팅 디스크의 디스크 이미지를 만들기 위해 이미지 생성에 직접 관련되지 않은 프로그램은 필수적이지 않습니다.
Mark

단일 사용자 모드를 언급하면 ​​도움이 될 수 있습니다.
Vality

1

Clonezilla 를 진지하게 사용하십시오 . Linux 기반 노턴 고스트와 같은 최고의 유틸리티입니다. 디스크 간 또는 디스크 간 파일 시스템 (파일로 저장)의 파티션 및 전체 디스크 복제를 모두 수행합니다. 대부분의 Linux 파일 시스템, NTFS, FAT32 등을 지원합니다. 내부 디스크, 외부 드라이브 또는 SMB 또는 NFS 공유의 네트워크를 통해 저장할 수 있습니다.

사용하기 매우 쉽고 많은 시간을 절약 할 수 있습니다.

편집 : 질문에 대답하기 위해, 아니오, dd블록 장치에서 읽는 것이 원자 적이 지 않기 때문에 파일 시스템의 사본이 일치하지 않을 수 있기 때문에 파일 시스템이 마운트되어있는 동안 대부분의 파일 시스템을 사용할 수 없습니다 . 예를 들어, 100 개의 블록을 복사하는 경우 시스템이 중간에있는 동안 첫 번째 블록과 마지막 블록을 업데이트했을 수 있습니다. 즉, 사본에는 첫 번째 블록이 아니라 수정 된 마지막 블록이 포함됩니다.


+1 : 질문에 대답하지 않지만 hdd 백업에 대한 좋은 제안 인 것 같습니다.
Marco Sulla
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.