การ backup hard disk ของ ubuntu server ด้วยคำสั่ง tar

จาก Wiki Opensource
รุ่นปรับปรุงเมื่อ 10:40, 3 เมษายน 2558 โดย Wiboon.w (พูดคุย | เรื่องที่เขียน)
(ต่าง) ←รุ่นปรับปรุงก่อนหน้า | รุ่นล่าสุด (ต่าง) | รุ่นปรับปรุงถัดไป→ (ต่าง)

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 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 ต้นฉบับ