การ backup hard disk ของ ubuntu server ด้วยคำสั่ง tar
บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 3-04-2558
ดูแลโดย WIBOON
- เป็นการ backup hard disk partition sda1 ของ server ด้วยคำสั่ง tar ขึ้นเป็น image file ชนิด tgz ในขณะเดียวกันก็ส่งผ่าน LAN ไปเก็บไว้บน server หรือ client บนเน็ตอีกเครื่องหนึ่ง
- เรียกได้ว่าเป็นเทคนิคโคลนนิ่ง (cloning)
- เทคนิคนี้เป็นสูตรที่ใช้สร้าง psu12-sritrang.tgz
- เป็นวิธีที่ต้องปิดเครื่องก่อนโคลนนิ่ง
ความต้องการในการทดสอบทำ
- server1 คือต้นฉบับ
- server2 คือที่เก็บไฟล์ .tgz ซึ่ง server2 ต้องติดตั้ง sshfs ไว้แล้ว (sudo apt-get install sshfs)
- server3 คือเครื่องว่างเปล่า
(1) การ Backup
ขั้นตอนดังนี้
บูทด้วยแผ่น sysresccd (download ที่นี่ เอาเวอร์ชั่น 4.4.0 ก็ได้ ล่าสุดที่ลงท้ายด้วย 0)
และทำการ clone โดยใช้คำสั่งดังต่อไปนี้
เชื่อมต่อพื้นที่ที่จะใช้เก็บ backup files
sshfs user2@server2:/home/user2/ /mnt/backup
เช่น user2 คือ david และ server2 คือ 10.0.100.5 ส่วน /home/user2 ก็เปลี่ยนไปตามที่ใช้ เช่น ถ้ามี ftp server ก็อาจเป็น /srv/ftp/pub/backup/
(จะมีการถาม password ของ username user2)
ทำการ backup ส่วนที่เป็น files ต่าง ๆ
mount /dev/sda1 /mnt/custom
tar -zcpvf /mnt/backup/server1.tgz -C /mnt/custom .
(ต้องระวังว่ามีเครื่องหมายจุดต่อท้ายด้วย)
รอสักพัก เห็นข้อความวิ่งไปเรื่อย ๆ จนข้อความหยุดวิ่ง
umount /mnt/custom
fusermount -u /mnt/backup
ปิดเครื่องด้วยคำสั่ง
shutdown -h now
เอาแผ่น sysresccd ออก
(2) การ Restore
ขั้นตอนดังนี้
เปิด server3 ให้บูทด้วยแผ่น sysresccd
สร้าง partition hard disk sda ใหม่ทั้งหมด (ขยายเนื้อที่ได้) หรือ ให้เท่ากับที่ใช้ใน /etc/fstab ของ server1
เช่น ใช้คำสั่ง parted เพื่อสร้าง partition /sda1 ขนาด 7 GB, /sda5 ขนาด 1 GB ดังต่อไปนี้
parted -s /dev/sda mklabel msdos
parted -s /dev/sda unit GB mkpart primary ext4 0 7
parted -s /dev/sda unit GB mkpart extended 7 8
parted -s /dev/sda unit GB mkpart logical linux-swap 7 8
mkfs.ext4 /dev/sda1
mkswap /dev/sda5
ทำการ restore โดยใช้คำสั่งดังต่อไปนี้
เชื่อมต่อพื้นที่ที่ใช้เก็บ backup files
sshfs user2@server2:/home/user2/ /mnt/backup
(จะมีการถาม password ของ username user2)
ทำการ restore ส่วนที่เป็น files ต่าง ๆ
mount /dev/sda1 /mnt/custom
tar -zxpvf /mnt/backup/server1.tgz -C /mnt/custom .
(ต้องระวังว่ามีเครื่องหมายจุดต่อท้ายด้วย)
รอสักพัก เห็นข้อความวิ่งไปเรื่อย ๆ จนข้อความหยุดวิ่ง
เตรียมพื้นที่ /dev, /sys, /proc สำหรับใช้กับคำสั่ง grub-install เพื่อทำ boot loader ให้เครื่อง boot ได้
mount --bind /dev /mnt/custom/dev
mount --bind /sys /mnt/custom/sys
mount --bind /proc /mnt/custom/proc
แก้ไขค่า UUID ของ partition ให้ตรงกับของใหม่
ใช้คำสั่งแสดงข้อมูล UUID ใน fstab ของเดิม ดังนี้
cat /mnt/custom/etc/fstab
สมมติได้ดังนี้
UUID=fb051dc6-5f32-4dd0-a5d3-935cee7d75bf / ext4 relatime,errors=remount-ro 0 1
UUID=b454ee0f-3135-4bc1-b111-16731f41059c none swap sw 0 0
ใช้คำสั่งแสดง UUID ของใหม่ ดังนี้
blkid
สมมติได้ดังนี้
/dev/sda1: UUID="babdfa44-be47-47fc-b6f5-92afd905487d" TYPE="ext4"
/dev/sda5: UUID="9881ca9c-9a5a-4104-be59-9ced35697f6d" TYPE="swap"
เราจะแก้ไขไฟล์ fstab ให้ถูกต้อง ใช้คำสั่งดังนี้
sed -i 's/fb051dc6-5f32-4dd0-a5d3-935cee7d75bf/babdfa44-be47-47fc-b6f5-92afd905487d/g' /mnt/custom/etc/fstab
sed -i 's/b454ee0f-3135-4bc1-b111-16731f41059c/9881ca9c-9a5a-4104-be59-9ced35697f6d/g' /mnt/custom/etc/fstab
และแก้ไขไฟล์ grub.cfg ให้ถูกต้อง ใช้คำสั่งดังนี้
chmod u+w /mnt/custom/boot/grub/grub.cfg
sed -i 's/fb051dc6-5f32-4dd0-a5d3-935cee7d75bf/babdfa44-be47-47fc-b6f5-92afd905487d/g' /mnt/custom/boot/grub/grub.cfg
sed -i 's/b454ee0f-3135-4bc1-b111-16731f41059c/9881ca9c-9a5a-4104-be59-9ced35697f6d/g' /mnt/custom/boot/grub/grub.cfg
chmod u-w /mnt/custom/boot/grub/grub.cfg
ทำ boot loader
chroot /mnt/custom /bin/bash -c "grub-install --recheck /dev/sda"
และอัปเดต grub
chroot /mnt/custom /bin/bash -c "update-grub"
ปิดการใช้พื้นที่ /mnt/custom ต่างๆ ที่ mount ไว้
umount /mnt/custom/dev
umount /mnt/custom/sys
umount /mnt/custom/proc
umount /mnt/custom
ปิดการใช้พื้นที่ /mnt/backup
fusermount -u /mnt/backup
ปิดเครื่องด้วยคำสั่ง
shutdown -h now
เอาแผ่น sysresccd ออก
ทดสอบเปิดเครื่องที่ restore สำเร็จนั้น จะใช้งานได้เหมือน server ต้นฉบับ