Friday, March 28, 2014

Linux backup: hard disk clone with "dd"

  • ประเด็นมีอยู่ว่าพยายาม clone hard disk ที่มี OS 2 ตัว คือ windows 7 และ linux mint 16 และ อยาก clone GRUB2 ไปด้วย 
  • hard disk master มีขนาด 1 TB แบ่งเป็น ทำ backup ลงที่ external drive
  • sda1 = system recovery 
  • sda2 = drive c 
  • sda3 = drive d 
  • sda4 = / (ext4)
  • โดยใช้ norton ghost หรือ clonezilla 
  • ใช้ norton ghost จากแผ่น hiren 9.8 มัน  alert ก่อน backup หว่า ที่ลองทำวิธีนี้เพราะ สมัยเรียนเคย ghost linux ext3 ได้อยู่นี่น่า ถ้าจำไม่ผิด restore แล้ว reinstall grub กลับได้ด้วยนะ แต่ ext4 มันทำไม่ได้หรือ ต้องใช้ ghost เวอร์ชั่นใหม่ล่าสุด หรือยังไงหว่า (ขี้เกียจลองแค่นี้ก็เสียเวลาไปเยอะแหละ)
  • ดันทุรัง backup โดยไม่สน alert ลองแบบ disk to image พอทำ image  เสร็จแล้ว ลอง restore ดู ผลคือ hard disk ลูกนั้น บูตถึงหน้า จอดำๆ มี cursor กระพริบ ไปต่อไม่ได้เลย ครับพี่น้อง
  • ลองใช้ clonezilla ลองทั้้งแบบ disk to image หรือ part to image ตอน backup ทั้ง 2 แบบนี้ failed ที่ sda4 เหมือนกันเลย 
  • ดันทุรังเหมือนเคย ลองทำจนเสร็จ แล้ว restore แล้วพยายามจะ reinstall grub โดย boot-repair หรือแบบวิธีดั้งเดิมที่เคยทำมา มันก็ยังไม่ได้ เราทำได้แค่ restore mgr แค่นั้นเอง (boot-repair มันไม่มีให้ reinstall grub มีแต่ restore mbr หว่า) ทำเสร็จใช้ได้แต่ windows 7 ส่วน GRUB ไม่มีให้ใช้จ้า
Solved
  • เราจะทำแบบ clone device to device เลย ต่อ disk ทั้งสองตัว ที่ mainboard โดย disk master ต่อที่สาย SATA1 และ disk mirror ต่อที่สาย SATA2
  • บูตด้วย clonezilla เลือกเข้า shell command หรือ บูตด้วย Live CD/USB เปิด terminal แล้วพิมพ์คำสั่ง
sudo dd if=/dev/sda of=/dev/sdb
  • copied 1 TB ใช้เวลา 20897 วินาที หรือ ประมาณ 5 ชั่วโมง 8 นาที ทำไมมันใช้เวลาเยอะจัง

----------------------------------------------------------------------------------------------------------


Most of Windows users may know "Norton Ghost". Norton Ghost is a backup software for hard disks. It can backี่up a whole hard disk or a partition to an image file. Also, Norton Ghost can copy all the contents from a hard disk to another exactly. However, Norton Ghost is a Windows software, users on other operating system (such as Linux) can not enjoy its powerful function. Fortunately, most of Unix/Linux operating system provides a command line whose function is similar to Norton Ghost, it is called "dd".

In fact, "dd" is much powerful than Norton Ghost. You can use many arguments to control it. In this short article, we only concern on how to backup a whole hard disk or a partition.

Hard Disk Clone

Suppose you have a 40GB hard disk and a removable hard disk whose capacity is 60GB, and you want to backup all the files from the hard disk to the removable disk. With "dd", it is a very easy task. Again, suppose your hard disk's Unix device name is /dev/sda and the removable disk is /dev/sdb. The following command can copy all the content from /dev/sda to /dev/sdb:
dd if=/dev/sda of=/dev/sdb
Here, if=... sets the source and of=... sets the destination. "dd" doesn't care of the contents of the hard disk. It just reads bytes from /dev/sda and writes them into /dev/sdb. It doesn't know what are files. So, the hard disk file system and how many partitions it has are not important. For example, if /dev/sda is splitted into three partitions, the /dev/sdb will have the same partitions. i.e. "destination" is completely same with "source".
Notice: to execute "dd" you should login as "root" or switch to "root" using "su" command. And you must be careful, a small mistake may cause a serious problem!

Making a Hard Disk Image File

Most of time you don't want to make a complete duplication of your hard disk. You may prefer to creating an image file of the hard disk and save it in other storage devices. The following command will create an image file "disk1.img" in your user's directory from /dev/sda:
dd if=/dev/sda of=~/disk1.img
Since you have created an image file, you can compress it with "gzip" or "bzip2":
gzip disk1.img #generates disk1.img.gz or
bzip2 disk1.img #generates disk1.img.bz2
You can save much storage space with compression. But it will take very long time.

Partition Clone

Backing up a hard disk partition is much similar to backing up a whole hard disk. The reason is that Unix/Linux uses device name, such as /dev/sda1, /dev/sda5... to indicate the partitions. For example, if you want to create an image file from the first partition of /dev/sda, use "dd" like this:
dd if=/dev/sda1 of=~/disk2.img
Also, you can compress the image file:
gzip disk2.img
By the way, you can copy a partition to another partition completely, just set "of" to the partition's device name. For example:
dd if=/dev/sda1 of=/dev/sdb5
This command will copy all the contents from /dev/sda1 to /dev/sdb5. You must be sure that the capacity of /dev/sdb5 is larger than /dev/sda1.

Restoring from an Image File

To restore a partition or a hard disk from an image file, just exchange the arguments "if" and "of". For example, restore the whole hard disk from the image file "disk1.img":
dd if=disk1.img of=/dev/sda
Restore the first partition of /dev/sda from the image file "disk2.img":
dd if=disk2.img of=/dev/sda1

No comments:

Post a Comment

Popular Posts