Partimage-HOWTO
|
Partimage
Version: 0.1
작성자: 이돈현(환골탈태)
http://blog.easysw.net
1. Partimage란 ¶파티션 별로 백업 및 복구를 가능하게 해 주는 프로그램이다.
프로그램을 설치해서 사용해도 되고, partimage 개발자가 만든 복구용 종합선물 세트인 systemrescuecd의 iso 파일을 다운받아서 복구 CD를 만드는 것도 좋다.
일반적으로 두번째 HDD에 백업을 하기도 하지만, 네트워크를 통해서도 가능하므로 partimage 백업서버를 구축해서 백업/복구를 하는 것도 좋겠다.
이 하우투 문서에서는 서버 상황을 고려한 예제나 스크립트를 다루고자 한다.
2. Partimage 사용 시나리오 ¶몇가지 예를 들어봤는데 더 다양한 상황이 있을 거라 생각된다.
3. Partimage 준비 ¶
wget http://jaist.dl.sourceforge.net/sourceforge/systemrescuecd/systemrescuecd-x86-1.0.2.iso wget http://nchc.dl.sourceforge.net/sourceforge/systemrescuecd/systemrescuecd-x86-1.0.2.iso
4.2. MBR 백업 ¶MBR을 백업한다.
mkdir /mnt/sdb1 mount -t ext3 /dev/sdb1 /mnt/sdb1 mkdir /mnt/sdb1/080329 cd /mnt/sdb1/080329 dd if=/dev/sda of=/mnt/sdb1/080329/080329-sda.mbr count=1 bs=512 4.4. 파티션 별 백업 ¶* Partition to save/restore sda1 선택 * Image file to create/use /mnt/sdb1/080329/080329-sda1.partimg.gz * Action to be done: (*) Save partition into a new image file * Compression Level (*) Gzip (.gz; medium speed + small image file) * Options [X] Check partition before saving [X] Enter Description * Image split mode (*) Into files whose size is:...... 2037 MiB * If finished successfully: (*) Wait 5.1. MBR 복구 ¶필요하다면 MBR을 복구한다.
mount -t ext3 /dev/sdb1 /mnt/sdb1 dd if=/mnt/sdb1/080329/080329-sda.mbr of=/dev/sda 5.2. 파티션 정보 복구 ¶파티션이 깨졌거나 HDD가 교체되었을 경우에는 파티션을 복구/생성한다.
mount -t ext3 /dev/sdb1 /mnt/sdb1 sfdisk /dev/sda < /mnt/sdb1/080329/080329-sda.sf만약 파티션을 복구했다면 재부팅 하도록 한다. 5.3. 파티션 별 복구 ¶* Partition to save/restore 복구할 sda1 선택 * Image file to create/use /mnt/sdb1/080329/080329-sda1.partimg.gz.000 * Action to be done: (*) Restore partion from an image file * Options 복구 테스트를 원한다면 시물레이션 모드로 한다. [ ] Simulation of the restoration (nothing is written) [ ] Erase free blocks with zero values * If finished successfully: (*) Wait ( ) Halt ( ) Reboot ( ) Quit 6.1. 백업 스크립트 (pisave.sh) ¶여러개의 디스크들과 파티션들을 한꺼번에 백업하는 스크립트이다.
보통 서버구축이 완료된 후에 한번 해 놓으면 좋다.
BackupDisks와 BackupParts, SaveDir1만 수정해서 사용하면 된다.
# by try365
## 수정할 부분 ####################################
# MBR과 파티션 덤프할 디스크들 (ex: sda sdb...)
BackupDisks="sda"
# 백업할 파티션들 (ex: sda1 sda2 sda5 sda6 sda7 sda8 sda9 sda10 sda11 sdb1 sdb2 sdb5....)
BackupParts="sda1 sda2 sda5"
# 백업한 이미지가 저장될 디렉토리 (ex: /mnt/sdc1) : 년월일로 디렉토리가 생성되고 그 안에 백업됨
SaveDir1="/mnt/sdb1"
## 수정이 불필요한 부분 #############################
DATE=`date +%y%m%d`
SaveDir2="${SaveDir1}/$DATE"
# -b : batch mode: the GUI won't wait for an user action
# -z1 : compress using gz
# -o : overwrite the existing image file without confirmation
# -d : don't ask any description for the iamge file
PM="partimage -b -z1 -o -d "
#####################################################
if [ ! -d $SaveDir1 ]; then
echo "$SaveDir1 not found"
exit
else
mkdir -p $SaveDir2
chmod 700 $SaveDir2
fi
# MBR 백업
for i in $BackupDisks; do
dd if=/dev/${i} of=$SaveDir2/${DATE}-${i}.mbr count=1 bs=512
done
# 파티션 정보 덤프
for i in $BackupDisks; do
sfdisk -d /dev/${i} > $SaveDir2/${DATE}-${i}.sf
done
# 파티션 백업
for i in $BackupParts ; do
echo "$PM save /dev/${i} ${SaveDir2}/$DATE-${i}.partimg.gz"
$PM save /dev/${i} ${SaveDir2}/$DATE-${i}.partimg.gz
done
# 백업된 이미지 정보 보기
for i in $BackupParts ; do
echo "partimage imginfo ${SaveDir2}/$DATE-${i}.partimg.gz.000"
done
# vi: set ts=2 sts=2 sw=2
백업 확인
[root@localhost root]# ls -l /mnt/sdb1/080329/ -rw-r--r-- 1 root root 512 3월 29 17:54 080329-sda.mbr -rw-r--r-- 1 root root 514 3월 29 17:54 080329-sda.sf -rw------- 1 root root 36631185 3월 29 17:54 080329-sda1.partimg.gz.000 6.2. 복구 스크립트 (pirestore.sh) ¶장애복구시 여러개의 파티션을 빠른 시간내에 복구하기 위한 스크립트로서 이미지 백업시 날짜를 참조하여 미리 복구 스크립트를 세팅해 두면 장애시 도움이 될 거 같다.
만약 sfdisk를 사용하여 파티션을 복구했다면 재부팅 하도록 한다.
# by try365
## 수정할 부분 ####################################
# MBR과 파티션을 복구할 디스크들 (ex: sda sdb...)
RestoreDisks="sda"
# 복구할 파티션들 (ex: sda1 sda2 sda5 sda6 sda7 sda8 sda9 sda10 sda11 sdb1..)
RestoreParts="sda1"
# 백업된 날짜 (디렉토리 이름과 파일명의 구분자로 쓰임)
Date="080329"
# 백업된 이미지가 저장되어 있는 디렉토리
ImageDir="/mnt/sdb1/$Date"
# Partimage의 복구 옵션 (-S : simulation of restoration mode)
# 복구를 시뮬레이션 하고자 한다면 -S 옵션을 추가하면 된다.
PM="partimage -b"
# MBR 복구 여부 [0|1]
RestoreMBR="0"
# 파티션 복구 여부 [0|1]
RestoreSFDISK="0"
#####################################################
if [ ! -d $ImageDir ]; then
echo "$ImageDir not found"
exit
fi
# MBR 복구 (ex: dd if=/mnt/sdb1/080329/080329-sda.mbr of=/dev/sda)
if [ "x${RestoreMBR}" = "x1" ]; then
for i in $RestoreDisks; do
echo "dd if=$I{mageDir}/${Date}-${i}.mbr of=/dev/${i}"
dd if=${ImageDir}/${Date}-${i}.mbr of=/dev/${i}
sleep 1
done
fi
# 파티션 테이블 복구 (ex: sfdisk /dev/sda < /mnt/sdb1/080329/080329-sda.sf)
if [ "x${RestoreSFDISK}" = "x1" ]; then
for i in $RestoreDisks; do
echo "sfdisk /dev/${i} < ${ImageDir}/${Date}-${i}.sf"
sfdisk /dev/${i} < ${ImageDir}/${Date}-${i}.sf
sleep 1
done
echo -n "If you finished an extended partitions recovery, "
echo "you will have to reboot your computer."
echo -n "reboot ? (y/n) : "
read yesorno
if [ "x$yesorno" = "xy" ]; then
echo "Do the unmounting and rebooting directly."
exit
else
echo "continue"
fi
fi
# Partimage로 파티션 복구
for i in $RestoreParts ; do
if [ -f ${ImageDir}/$Date-${i}.partimg.gz.000 ]; then
#partimage -b -S restore /dev/sda1 /PATH/080329-sda1.partimg.gz.000
echo "$PM restore /dev/${i} ${ImageDir}/$Date-${i}.partimg.gz.000"
$PM restore /dev/${i} ${ImageDir}/$Date-${i}.partimg.gz.000
else
echo "error : ${ImageDir}/$Date-${i}.partimg.gz.000 not found"
fi
done
# vi: set ts=2 sts=2 sw=2
|
You recoil from the crude; you tend naturally toward the exquisite. |











![[http]](/imgs/http.png)

