2010. 11. 11. 12:26

Ubuntu에서 File 복사, Partition 백업 하기

대상 directory에 쓰기 권한이 있을 때, file과 directory 복사는 간단한 명령으로 실행가능합니다. 표준 cp 명령은 새로운 이름으로 파일을 복사하거나, 새로운 directory에 동일한 이름으로 복사를 하는데, 새로운 time stamp로 생성됩니다. cp의 다른 옵션은 date/time stamp를 유지/관리하게 해주고, 재귀적으로 복사하고, 그리고 overwriting에 대한 응답을 제공합니다.
$ cd ; touch index.html
$ mkdir /tmp/html
$ cp -i index.html /tmp/html
$ cp -il index/html /tmp/html
$ mkdir /tmp/back
$ cp -a /tmp/html /tmp/back
$ cp -R /tmp/html /tmp/back

위의 예제는 file을 복사하는 방법을 보여주고 있습니다. 처음 cp 명령은 index.html 파일이 /tmp/html에 존재하는하는지 확인하고, 그런 경우 사용자에게 알림을 띄웁니다. 다음예는 index.html 파일은 /tmp/html directory에 hard-link file로 만듭니다. 이런 경우 두개의 hard link와 대상 file이 동일한 파일을 가리키고 있기 때문에, 각각의 위치로 부터의 file은 모두 내용이 변경됩니다.(해당 link는 /tmp/html과 home directory가 같은 file system인 경우 가능합니다.)

cp -a 명령은 /tmp/html directory 하부의 모든 파일을 권한과 소유를 그대로 유지하여 복사합니다. 예를들어, 만일 /tmp/back이 USB 드라이브를 가리킬 때, 그 명령은 당신의 web server 내용을 그 드라이브에 복사하게 됩니다. 그리고 -R 명령은 역시 재귀적으로 복사하는데, 소유자를 현재의 user로 변경시키고 date/time stamp를 새로 할당시킵니다.

dd 명령은 data를 복사하는데 또다른 방법을 제공합니다. 이 명령은 linux에서 굉장히 강력한데, hard ware 장치를 포함한 모든 것이 파일이기 때문입니다. 다음의 예를 보십시요.

$ dd if=/dev/zero of=/tmp/mynullfile count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00079602 s, 643 kB/s

/dev/zero는 null 문자를 생성하는 특수한 파일입니다. dd 명령은 /dev/zero를 input으로 하고 /tmp/mynullfile을 output으로 합니다. count는 block의 개수를 의미합니다. 디폴트로 block은 512 byte입니다. 결과는 512 byte의 null 문자로 채워진 파일이 생성됩니다. less나 vi 명령을 통해 내용을 확인할 수 있습니다. 그러나, file을 보기위한 더 좋은 방법으로 od(Octal Dump)명령이 있습니다.

$ od -vt x1 /tmp/mynullfile
0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...
0000760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0001000

또다른 dd 명령의 예를 소개합니다.
$ dd if=/dev/zero of=/tmp/mynullfile count=10 bs=2
10+0 records in
10+0 records out
20 bytes (20 B) copied, 0.00444128 s, 4.5 kB/s
 
block size를 2byte로 하고 10block(=20byte)인 경우입니다. 다음의 명령은 primary master IDE 드라이브의 첫 partition을 두번째 partition으로 clone(즉, 백업)하는 명령입니다. (본 명령어 사용에 주의하십시요!)
$ sudo dd if=/dev/hda1 of=/dev/hdb2

다음은 압축하여 partition을 백업하는 것을 보여줍니다. 일반적으로 이 명령을 수행하기 앞서 unmount가 되어야 합니다. (본 명령의 사용에 주의하십시요!)
$ sudo unmount /dev/hda1
$ sudo dd if=/dev/hda1 | gzip > bootpart.gz

다음 명령은 CD/DVD에 있는 ISO를 당신의 USB 드라이브로 복사하는 것을 보여줍니다. (USB는 /dev/sdb1인 경우로 가정)
$ sudo dd if=whatever.iso of=/dev/sdb1
이 명령은 file에 있는 binary copy를 수행합니다.

다음은 primary master IDE HDD의 master boot record를 복사하는 과정을 보여줍니다.
$ dd if=/dev/hda of=mymbrfile bs=512 count=1

만약 CD/DVD로 굽기 위한 ISO file의 복사를 위해서는, CD/DVD를 삽입한뒤 (/dev/cdrom으로 가정) 다음을 실행하면 됩니다.
$ dd if=/dev/cdrom of=whatever.iso