This article explains the steps for the installation of an SSD device on an existing Ubuntu desktop PC.
Disk Performances
First of all, let's have a look at the disk read performance with the hdparm
utility. The desktop PC has three disks, /dev/sda
being the new SSD device (an OCZ Vertex 2 SATA II 3.5" SSD).
$ sudo -i hdparm -t /dev/sda /dev/sdb /dev/sdc
The three disks have the following performance:
sda: OCZ-VERTEX2 3.5 229.47 MB/sec
sdb: WDC WD3000GLFS-01F8U0 122.29 MB/sec
sdc: ST3200822A 59.23 MB/sec
The SSD device appears to be 2 times faster than a 10000 rpm disk.
Plan for the move
The first step is to plan for the move and define what files should be located on the SSD device.
Identify files used frequently
To benefit of the high read performance, files used frequently could be moved to the SSD device. To identify them, you can use the find
command and the -amin
option. This option will not work if the file system is mounted with noatime
. The -amin
option indicates a number of minutes. To find the files that were accessed during the last 24 hours, you may use the following command:
$ sudo find /home -amin -1440
In most cases, files accessed frequently are the system files (in /bin
, /etc
, /lib
, ..., /usr/bin
, /usr/lib
, /usr/share
, ...) and users' files located in /home
.
Identify Files that change frequently
Some people argue that files modified frequently should not be located on an SSD device (write endurance and write performance).
On a Linux system, the system files that are changed on regular basis are in general grouped together in the /var
directory. Some configuration files are modified by system daemons while they are running. The list of system directories that changes can be limited to:
/etc (cups/printers.conf.0, mtab, lvm/cache, resolv.conf, ...)
/var (log/*, cache/*, tmp/*, lib/*...)
/boot (grub/grubenv modified after booting)
Temporary Files
On Linux temporary files are stored in one of the following directories. Several KDE applications are saving temporary files in the .kde/tmp-
host
directory for each user. These temporary files could be moved to a ram file system.
/tmp
/var/tmp
/home/$user/.kde/tmp-$host
Move plan
The final plan was to create one partition for the root file system and three LVM partitions for /usr
, /var
and /home
directories.
Partition the drive
The drive must be partitioned with fdisk
. I created one bootable partition and a second partition with what remains.
$ sudo fdisk -l /dev/sda
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00070355
Device Boot Start End Blocks Id System
/dev/sda1 * 1 1295 10402056 83 Linux
/dev/sda2 1296 14593 106816185 83 Linux
To ease future management of partitions, it is useful to use LVM and create a volume group.
$ sudo vgcreate vg01 /dev/sda2
Volume group "vg01" successfully created
The partitions are then created by using lvcreate
. More space can be allocated on them by using the lvextend
utility.
$ sudo lvcreate -L 10G -n sys vg01
Logical volume "sys" created
$ sudo lvcreate -L 10G -n var vg01
Logical volume "var" created
$ sudo lvcreate -L 4G -n swap vg01
Logical volume "swap" created
$ sudo lvcreate -L 60G -n home vg01
Logical volume "home" created
The LVM partitions are available through the device mapper and they can be accessed by their name:
$ ls -l /dev/vg01/
total 0
lrwxrwxrwx 1 root root 19 2011-02-20 14:03 home -> ../mapper/vg01-home
lrwxrwxrwx 1 root root 19 2011-02-20 14:03 swap -> ../mapper/vg01-swap
lrwxrwxrwx 1 root root 18 2011-02-20 14:03 sys -> ../mapper/vg01-sys
lrwxrwxrwx 1 root root 18 2011-02-20 14:03 var -> ../mapper/vg01-var
Format the partition
Format the file system with ext4 as it integrates various improvements which are useful for the SSD storage (Extents, Delayed allocation). Other file systems will work very well too.
$ sudo mkfs -t ext4 /dev/vg01/sys
Move the files
To move files from one system to another place, it is safer to use the tar
command instead of a simple cp
. Indeed, the tar
command is able to copy special files without problems while not all cp
commands support the copy of special files.
$ sudo mount /dev/vg01/sys /target
$ sudo -i
# cd /usr
# tar --one-file-system -cf - . | (cd /target; tar xf -)
If the file system to move is located on another LVM partition, it is easier and safer to use the pvmove
utility to move physical extents from one physical volume to another one.
Change the mount point
Edit the /etc/fstab
file and change the old mount point to the new one. The noatime
mount option tells the kernel to avoid updating the file access time when it is read.
/dev/vg01/sys /usr ext4 noatime 0 2
/dev/vg02/home /home ext4 noatime 0 2
/dev/vg01/var /var ext4 noatime 0 2
Tune the IO Scheduler
For the SSD drive, it is best to disable the Linux IO scheduler. For this, we will activate the noop
IO scheduler. Other disks will use the default IO scheduler or another one. Add the following lines in /etc/rc.local
file:
test -f /sys/block/sda/queue/scheduler &&
echo noop > /sys/block/sda/queue/scheduler
References
LVM
ext4
http://www.ocztechnologyforum.com/forum/showthread.php?54379-Linux-Tips-tweaks-and-alignment
http://www.storagesearch.com/ssdmyths-endurance.html