Friday, April 13, 2018

CentOS 6.6 리눅스 관리] 11.5 아카이브, 압축 및 백업/복구 - dump, restore


안녕하세요. 썬구루입니다. 이 게시물에서는 EXT 2/3/4 파일시스템 백업/복구 명령인 dump와 restore 명령에 대해 알아보도록 하겠습니다.

tar 명령은 디렉터리 또는 파일을 백업/복구하기 위해 사용되는 명령입니다. 특정 파일시스템을 단일 파일이나 테이프 드라이브 같은 장치에 백업 복구를 하기 위해서는 파일시스템 백업에 관련된 명령을 사용해야 하는 것이죠. CentOS 리눅스 버전 6까지 EXT 파일시스템을 주로 사용하는데 이 파일시스템을 백업/복구하기 위해서는 dump와 restore 명령을 사용하는 것이죠.

예전에  솔라리스 사용할 때는 UFS 파일시스템 백업/복구를 위해 ufsdump/ufsrestore 명령을 사용했었는데 명령 형식이 똑같더라고요. 개념도 똑같고... 그러니 금방 사용할 수 있었죠.. ^^ dump/restore 명령의 특징은 아래와 같습니다.

  ▶ EXT 2/3/4 파일시스템 백업을 하기 위해 사용
  ▶ 전체/증감 백업 가능
  ▶ 부분 복구 가능
  ▶ 멀티 볼륨 백업 가능 (여러 개의 테이프 미디어를 사용하여 파일시스템 백업 가능)

전체(Full) 백업과 증감(Incremental) 백업의 차이는 다음과 같습니다.

백업 종류
내 용
전체 백업
 파일시스템의 전체 파일을 백업하는 것을 말한다. (Full Backup)
차등 백업
 가장 최근 백업 이후 시점으로 변경된 파일만 백업하는 것을 말한다. (Differential Backup)
누적 백업
 가장 최근 전체 백업한 이후 시점으로 변경된 파일만 백업하는 것을 말한다. (Cumulative)

여기서는 mhVTL이 설치된 CentOS 6.4 리눅스 가상머신을 가지고 테스트를 하도록 하겠습니다.

■ dump 명령

dump 명령은 EXT 2/3/4 파일시스템을 백업하기 위해 사용되는 명령이다. 파일시스템 기반의 단일 파일로 또는 테이프 드라이브 같은 장치를 사용하여 백업을 할 수 있다.

1). 명령 형식

dump [옵션] -f DEVICENAME  FILESYSTEM

2). 옵션

옵 션
내 용
-0~9
 백업 레벨(Level)을 나타낸다. 0은 전체 백업을 1~9는 숫자 조합을 통해 차등 또는 누적 백업을 나타낸다. 여기에서는 일정한 규칙이 적용되는데 그것은 아래와 같다.

  '같은 수는 같은 수를 포함하고 작은 수는 큰 수를 포함한다.' 
-u
 /etc/dumpdates 파일에 파일시스템 백업 정보를 기록한다.
-s
 실제 백업은 하지 않고 백업 시 필요한 용량을 알아보기 위해 사용한다.
-f DEVICENAME
 tar 명령의 -f 옵션과 동일한다.

증감 백업의 기준은 전체 백업이다. 아래 그림을 보고 백업 레벨을 나타내는 번호가 어떻게 적용되는지 확인한다.

3). 예제

CentOS 6.4 리눅스 가상머신에 20GB 새 가상 디스크를 추가하여 인식시킨다.

[root@centos64 ~]# lspci | grep -i scsi
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
[root@centos64 ~]#
[root@centos64 ~]# find /sys/devices -name scan
/sys/devices/pci0000:00/0000:00:07.1/host1/scsi_host/host1/scan
/sys/devices/pci0000:00/0000:00:07.1/host2/scsi_host/host2/scan
/sys/devices/pci0000:00/0000:00:10.0/host0/scsi_host/host0/scan
/sys/devices/pseudo_0/adapter0/host3/scsi_host/host3/scan
[root@centos64 ~]#
[root@centos64 ~]# echo "- - -" > /sys/devices/pci0000:00/0000:00:10.0/host0/scsi_host/host0/scan
[root@centos64 ~]# lsblk
NAME                           MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                              8:0    0   20G  0 disk
├─sda1                           8:1    0  500M  0 part /boot
└─sda2                           8:2    0 19.5G  0 part
  ├─vg_centos64-lv_root (dm-0) 253:0    0 15.6G  0 lvm  /
  └─vg_centos64-lv_swap (dm-1) 253:1    0  3.9G  0 lvm  [SWAP]
sr0                             11:0    1  4.1G  0 rom  /media/CentOS_6.4_Final
sdb                              8:16   0   20G  0 disk 
[root@centos64 ~]# 

아래와 같이 LVM을 사용하여 5GB 용량의 볼륨을 생성. 그 위해 EXT4 파일시스템을 생성한 후 /data01 디렉터리에 마운트 시킨다.

[root@centos64 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created
[root@centos64 ~]#
[root@centos64 ~]# vgcreate vg_db /dev/sdb
  Volume group "vg_db" successfully created
[root@centos64 ~]#
[root@centos64 ~]# lvcreate -L 5g -n data01 vg_db
  Logical volume "data01" created
[root@centos64 ~]#
[root@centos64 ~]# mkfs -t ext4 /dev/vg_db/data01
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
 32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done                 
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@centos64 ~]#
[root@centos64 ~]# blkid /dev/vg_db/data01
/dev/vg_db/data01: UUID="cb71cfd6-5802-48f4-8469-0cab9716b2c4" TYPE="ext4"
[root@centos64 ~]#
[root@centos64 ~]# mkdir /data01
[root@centos64 ~]#
[root@centos64 ~]# mount /dev/vg_db/data01 /data01
[root@centos64 ~]#
[root@centos64 ~]# df -h /data01
Filesystem                                 Size  Used Avail Use% Mounted on
/dev/mapper/vg_db-data01         5.0G  138M  4.6G   3% /data01
[root@centos64 ~]#
[root@centos64 ~]# vi /etc/fstab

/dev/vg_db/data01 /data01   ext4 defaults 1 2   <== 내용 추가

[root@centos64 ~]#




아래와 같은 명령을 사용하여 /dev/st0 테이프 드라이브에 삽입되어 있는 테이프 미디어 내용을 삭제하여 초기화한다. 이 명령은 공 테이프처럼 사용하기 위해 실행하는 것이다.

 [root@centos64 ~]# mt -f /dev/st0 erase

dump와 restore 명령을 실행하기 위해 CentOS 6.4 DVD 1번 ISO 파일을 넣은 후 아래와 같이 관련 패키지를 설치한다.

[root@centos64 data01]# cd /media/CentOS_6.4_Final/Packages/
[root@centos64 Packages]#
[root@centos64 Packages]# rpm -ivh rmt-0.4-0.6.b42.el6.x86_64.rpm
warning: rmt-0.4-0.6.b42.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:rmt                    ########################################### [100%]
[root@centos64 Packages]#
[root@centos64 Packages]# rpm -ivh dump-0.4-0.6.b42.el6.x86_64.rpm
warning: dump-0.4-0.6.b42.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:dump                   ########################################### [100%]
[root@centos64 Packages]#
[root@centos64 Packages]# which dump
/sbin/dump
[root@centos64 Packages]# which restore
/sbin/restore
[root@centos64 Packages]#

아래와 같은 명령을 사용하여 /data01 파일시스템에 파일을 생성 후 파일시스템 전체 백업 및 증감 백업을 실행한다.

[root@centos64 Packages]# cd /data01
[root@centos64 data01]#
[root@centos64 data01]# touch file1 file2 file3
[root@centos64 data01]#
[root@centos64 data01]# ls -l
total 16
-rw-r--r--. 1 root root     0 Jul 11 23:23 file1
-rw-r--r--. 1 root root     0 Jul 11 23:23 file2
-rw-r--r--. 1 root root     0 Jul 11 23:23 file3
drwx------. 2 root root 16384 Jul 11 23:09 lost+found
[root@centos64 data01]#
[root@centos64 data01]# dump -0uf /dev/nst0 /data01
  DUMP: Date of this level 0 dump: Mon Jul 11 23:23:57 2016
  DUMP: Dumping /dev/mapper/vg_db-data01 (/data01) to /dev/nst0
  DUMP: Label: none
  DUMP: Writing 10 Kilobyte records
  DUMP: mapping (Pass I) [regular files]
  DUMP: mapping (Pass II) [directories]
  DUMP: estimated 110 blocks.
  DUMP: Volume 1 started with block 1 at: Mon Jul 11 23:23:57 2016
  DUMP: dumping (Pass III) [directories]
  DUMP: dumping (Pass IV) [regular files]
  DUMP: Closing /dev/nst0
  DUMP: Volume 1 completed at: Mon Jul 11 23:23:57 2016
  DUMP: Volume 1 100 blocks (0.10MB)
  DUMP: 100 blocks (0.10MB) on 1 volume(s)
  DUMP: finished in less than a second
  DUMP: Date of this level 0 dump: Mon Jul 11 23:23:57 2016
  DUMP: Date this dump completed:  Mon Jul 11 23:23:57 2016
  DUMP: Average transfer rate: 0 kB/s
  DUMP: DUMP IS DONE
[root@centos64 data01]#
[root@centos64 data01]# touch file3 file4
[root@centos64 data01]#
[root@centos64 data01]# dump -1uf /dev/nst0 /data01
  DUMP: Date of this level 1 dump: Mon Jul 11 23:24:42 2016
  DUMP: Date of last level 0 dump: Mon Jul 11 23:23:57 2016
  DUMP: Dumping /dev/mapper/vg_db-data01 (/data01) to /dev/nst0
  DUMP: Label: none
  DUMP: Writing 10 Kilobyte records
  DUMP: mapping (Pass I) [regular files]
  DUMP: mapping (Pass II) [directories]
  DUMP: estimated 100 blocks.
  DUMP: Volume 1 started with block 1 at: Mon Jul 11 23:24:42 2016
  DUMP: dumping (Pass III) [directories]
  DUMP: dumping (Pass IV) [regular files]
  DUMP: Closing /dev/nst0
  DUMP: Volume 1 completed at: Mon Jul 11 23:24:42 2016
  DUMP: Volume 1 100 blocks (0.10MB)
  DUMP: 100 blocks (0.10MB) on 1 volume(s)
  DUMP: finished in less than a second
  DUMP: Date of this level 1 dump: Mon Jul 11 23:24:42 2016
  DUMP: Date this dump completed:  Mon Jul 11 23:24:42 2016
  DUMP: Average transfer rate: 0 kB/s
  DUMP: DUMP IS DONE
[root@centos64 data01]#
[root@centos64 data01]# touch file5
[root@centos64 data01]#
[root@centos64 data01]# ls -l
total 16
-rw-r--r--. 1 root root     0 Jul 11 23:23 file1
-rw-r--r--. 1 root root     0 Jul 11 23:23 file2
-rw-r--r--. 1 root root     0 Jul 11 23:24 file3
-rw-r--r--. 1 root root     0 Jul 11 23:24 file4
-rw-r--r--. 1 root root     0 Jul 11 23:24 file5
drwx------. 2 root root 16384 Jul 11 23:09 lost+found
[root@centos64 data01]#
[root@centos64 data01]# dump -2uf /dev/nst0 /data01
  DUMP: Date of this level 2 dump: Mon Jul 11 23:25:09 2016
  DUMP: Date of last level 1 dump: Mon Jul 11 23:24:42 2016
  DUMP: Dumping /dev/mapper/vg_db-data01 (/data01) to /dev/nst0
  DUMP: Label: none
  DUMP: Writing 10 Kilobyte records
  DUMP: mapping (Pass I) [regular files]
  DUMP: mapping (Pass II) [directories]
  DUMP: estimated 99 blocks.
  DUMP: Volume 1 started with block 1 at: Mon Jul 11 23:25:09 2016
  DUMP: dumping (Pass III) [directories]
  DUMP: dumping (Pass IV) [regular files]
  DUMP: Closing /dev/nst0
  DUMP: Volume 1 completed at: Mon Jul 11 23:25:09 2016
  DUMP: Volume 1 100 blocks (0.10MB)
  DUMP: 100 blocks (0.10MB) on 1 volume(s)
  DUMP: finished in less than a second
  DUMP: Date of this level 2 dump: Mon Jul 11 23:25:09 2016
  DUMP: Date this dump completed:  Mon Jul 11 23:25:09 2016
  DUMP: Average transfer rate: 0 kB/s
  DUMP: DUMP IS DONE
[root@centos64 data01]#

명령을 실행한 내용은 아래와 같다.

1. /data01로 이동
2. touch 명령으로 file1, file2, fil3 파일 생성 후 dump 명령을 사용하여 /dev/st0 테이프 디바이스로 전체 백업 실행
   -> file1, file2, file3, lost_found 백업
3. touch 명령으로 file3 수정시간 변경, file4 파일 생성 후 증감 백업 (Level 1) 실행
   -> file3, file4 백업
4. touch 명령으로 file5 파일 생성 후 증감 백업 (Level 1) 실행
   -> file5 백업

아래는 /etc/dumpfiles 파일에 저장된 파일시스템 백업 정보 내용이다. 줄의 내용은 '파일시스템 백업 레벨 백업 시간'이다.

[root@centos64 data01]# more /etc/dumpdates
/dev/mapper/vg_db-data01 0 Mon Jul 11 23:23:57 2016 +0900
/dev/mapper/vg_db-data01 1 Mon Jul 11 23:24:42 2016 +0900
/dev/mapper/vg_db-data01 2 Mon Jul 11 23:25:09 2016 +0900
[root@centos64 data01]#  




■ restore 명령

dump 명령으로 백업한 것을 복구하기 위해 사용되는 명령이다.

1). 명령 형식

restore [옵션] -f DEVICENAME

2). 옵션

옵 션
내 용
-t
 복구는 하지 않고 백업된 파일 리스트 정보를 확인하기 위해 사용한다.
-r
 전체 복구를 하기 위해 사용한다.
-i
 상호 대화형 모드에서 파일 복구를 하기 위해 사용한다. (Interactive mode)
-x
 부분 복구를 하기 위해 사용한다.
-v
 Verbose mode
-f DEVICENAME
 tar 명령의 -f 옵션과 동일한다.

3). 예제

아래 명령을 실행하여 /dev/st0 테이프 디바이스에 있는 테이프 미디어를 처음으로 되감는다.

 [root@centos64 data01]# mt -f /dev/st0 rewind

테이프 미디어에는 3개의 백업 이미지 즉 서브 볼륨(Sub Volume)이 존재한다. 왜냐하면 3번을 백업했기 때문이다. 아래는 첫 번째 백업 이미지를 확인하고 /data01/test1 디렉터리에 복구를 하였다.

[root@centos64 data01]# mkdir test1 test2 test3
[root@centos64 data01]#
[root@centos64 data01]# cd test1
[root@centos64 test1]#
[root@centos64 test1]# restore -tvf /dev/st0
Verify tape and initialize maps
Input is from a local tape
Tape block size is 10
Dump   date: Mon Jul 11 23:23:57 2016
Dumped from: the epoch
Level 0 dump of /data01 on centos64:/dev/mapper/vg_db-data01
Label: none
Extract directories from tape
Initialize symbol table.
dir          2 .
dir         11 ./lost+found
leaf        12 ./file1
leaf        13 ./file2
leaf        14 ./file3
[root@centos64 test1]# ls
file1  file2  file3  lost+found  restoresymtable
[root@centos64 test1]#
[root@centos64 test1]# restore -rvf /dev/nst0
Verify tape and initialize maps
Input is from a local tape
Tape block size is 10
Dump   date: Mon Jul 11 23:23:57 2016
Dumped from: the epoch
Level 0 dump of /data01 on centos64:/dev/mapper/vg_db-data01
Label: none
Begin level 0 restore
Initialize symbol table.
Extract directories from tape
Calculate extraction list.
restore: ./lost+found: File exists
Extract new leaves.
Check pointing the restore
extract file ./file1
extract file ./file2
extract file ./file3
Add links
Set directory mode, owner, and times.
Check the symbol table.
Check pointing the restore
[root@centos64 test1]#
[root@centos64 test1]# ls
file1  file2  file3  lost+found  restoresymtable
[root@centos64 test1]# 

아래는 테이프를 앞으로 되돌리고 구간 이동을 한 다음 restore 명령을 실행하여 file3, file4를 복구하는 것을 보여준다.

[root@centos64 test1]# mt -f /dev/st0 rewind
[root@centos64 test1]#
[root@centos64 test1]# mt -f /dev/nst0 fsf 1
[root@centos64 test1]#
[root@centos64 test1]# restore -rvf /dev/nst0
Verify tape and initialize maps
Input is from a local tape
Tape block size is 10
Dump   date: Mon Jul 11 23:24:42 2016
Dumped from: Mon Jul 11 23:23:57 2016
Level 1 dump of /data01 on centos64:/dev/mapper/vg_db-data01
Label: none
Begin incremental restore
Initialize symbol table.
Extract directories from tape
Mark entries to be removed.
Calculate node updates.
Find unreferenced names.
Remove old nodes (directories).
Extract new leaves.
Check pointing the restore
Remove leaf ./file3
extract file ./file3
extract file ./file4
Add links
Set directory mode, owner, and times.
Check the symbol table.
Check pointing the restore
[root@centos64 test1]#
[root@centos64 test1]# ls
file1  file2  file3  file4  lost+found  restoresymtable
[root@centos64 test1]#

아래는 테이프를 앞으로 되돌리고 구간 이동을 한 다음 restore 명령에 -x 옵션을 사용하여 file5를 복구하는 것을 보여준다.

[root@centos64 test1]# mt -f /dev/st0 rewind
[root@centos64 test1]# mt -f /dev/nst0 fsf 2
[root@centos64 test1]#
[root@centos64 test1]# restore -xvf /dev/st0 ./file5
Verify tape and initialize maps
Input is from a local tape
Tape block size is 10
Dump   date: Mon Jul 11 23:25:09 2016
Dumped from: Mon Jul 11 23:24:42 2016
Level 2 dump of /data01 on centos64:/dev/mapper/vg_db-data01
Label: none
Extract directories from tape
Initialize symbol table.
Extract requested files
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
extract file ./file5
Add links
Set directory mode, owner, and times.
set owner/mode for '.'? [yn] y
[root@centos64 test1]#
[root@centos64 test1]# ls
file1  file2  file3  file4  file5  lost+found  restoresymtable
[root@centos64 test1]# 


여기까지 dump와 restore 명령을 사용하여 EXT 파일시스템 백업 및 파일 복구에 대해 알아보았습니다. 다음 게시물에서는 SWAP 메모리에 대해 알아보도록 하겠습니다.






No comments:

Post a Comment