When building my NAS I’ve picked a spare laptop hdd (spinny type) for the OS to boot from, but I’ve reached to a point where I wanted my NAS os to boot from a SDD.
Since a stock Fedora 20 doesn’t use so much disk space, I wanted to switch from a 250Gb SATA hdd to a smaller but faster 80Gb SSD (an old Intel X25-M which I have for few years now).
Since the existing disk was partitioned automatically, I’ve decided to create similar partitions on the new disk. Existing partitions were:
/dev/sde3 on / type ext4 (rw,relatime,seclabel,data=ordered) /dev/sde1 on /boot type ext4 (rw,relatime,seclabel,data=ordered) /dev/sde5 on /home type ext4 (rw,relatime,seclabel,data=ordered)
One thing not to forget is to set the new boot partition to be bootable. Also, not mentioned is the swap partition, it should be created too (and later have the new UUID updated in /etc/fstab).
After creating the new partitions (I’m copying /dev/sde to /dev/sda) was to mount the new partitions, so that I can proceed to copy the data:
/dev/sda1 on /media/ssd/boot type ext4 (rw,relatime,seclabel,data=ordered) /dev/sda3 on /media/ssd/root type ext4 (rw,relatime,seclabel,data=ordered) /dev/sda5 on /media/ssd/home type ext4 (rw,relatime,seclabel,data=ordered)
Copying the data was done with
restore similar to:
/usr/sbin/dump 0f -
| (cd /mnt/newdrive(/folder) && /usr/sbin/restore xf - )
So here goes:
/usr/sbin/dump 0f - /dev/sde1 | (cd /media/ssd/boot && /usr/sbin/restore xf - ) /usr/sbin/dump 0f - /dev/sde3 | (cd /media/ssd/root && /usr/sbin/restore xf - ) /usr/sbin/dump 0f - /dev/sde5 | (cd /media/ssd/home && /usr/sbin/restore xf - )
A detailed output of copying the root partition:
[root@biggie ssd]# /usr/sbin/dump 0f - /dev/sde3 | (cd /media/ssd/root && /usr/sbin/restore xf - ) DUMP: Date of this level 0 dump: Fri Apr 17 22:52:47 2015 DUMP: Dumping /dev/sde3 (/) to standard output DUMP: Label: none DUMP: Writing 10 Kilobyte records DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 25369248 blocks. DUMP: Volume 1 started with block 1 at: Fri Apr 17 22:52:51 2015 DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] /usr/sbin/restore: ./lost+found: File exists DUMP: 18.57% done at 15704 kB/s, finished in 0:21 DUMP: 53.97% done at 22821 kB/s, finished in 0:08 DUMP: 69.82% done at 19680 kB/s, finished in 0:06 DUMP: 86.61% done at 18310 kB/s, finished in 0:03 DUMP: Volume 1 completed at: Fri Apr 17 23:17:15 2015 DUMP: Volume 1 26316040 blocks (25699.26MB) DUMP: Volume 1 took 0:24:24 DUMP: Volume 1 transfer rate: 17975 kB/s DUMP: 26316040 blocks (25699.26MB) DUMP: finished in 1464 seconds, throughput 17975 kBytes/sec DUMP: Date of this level 0 dump: Fri Apr 17 22:52:47 2015 DUMP: Date this dump completed: Fri Apr 17 23:17:15 2015 DUMP: Average transfer rate: 17975 kB/s DUMP: DUMP IS DONE set owner/mode for '.'? [yn] y
Prepare new disk for boot
Two remaining things: update grup as well as update UUIDs in /etc/fstab. To update grub, we need to
chroot into the new root partition, but before that, we need to mount the new boot partition onto the
boot folder into the new root. Sounds complicated but it is not:
cd /media/ssd mount /dev/sda3 root/ mount -o bind /dev dev/ mount /dev/sda1 boot/ chroot /media/ssd/root
/media/ssh/root points to the new root partition, and
/media/ssh/root/boot points to the new boot partition. This is done so that grup utilities will actually write the files correctly onto the new hard disk.
Install grub: (first command is to create the proper configuration file, second command is to set the bootloader:)
update-grub2 grub2-install /dev/sda
Now we can exit the chroot environment (with
exit) and the only remaining thing is to replace the UUIDs in /media/ssd/root/etc/fstab with the new UUIDs: For this I’ve relied on a perl oneliner.
[root@biggie ssd]# blkid /dev/sda1: UUID="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" TYPE="ext4" PARTUUID="aaaaaaaa-aa" ... /dev/sde1: UUID="bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" TYPE="ext4" PARTUUID="bbbbbbbb-bb"
Since I am copying from
sda the ‘bbbb…’ UUID has to be found and replaced with the ‘aaaa…’ one.
[root@biggie etc]# pwd /media/ssd/root/etc perl -pi -w -e 's/bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/g;' fstab
The perl one liner has to be called for all 4 partitions (root, swap, home and boot).