11/01/2012
Linux SSD partition alignment tips
Yes, this is another post on the internet about properly aligning your SSD partitions on Linux. It’s mostly my notes that I have gathered from other posts around the net. Please read the whole post before starting to create partitions on your SSD.
Intro
I bought myself a brand new SSD for Xmas, OCZ Agilty 3 120Gb. But I also bought a CDROM caddy so that I could replace my useless macbook CDROM drive, last time I used it was probably 2009 or 2010. So my plan was to put the old, original macbook SATA hard disk inside the caddy and use the SSD as the primary one. Sounds easy right ? Well you just need patience, lots of patience in order to remove all necessary screws in order to get the CDROM drive out and replace it with the caddy. Instructions for this procedure can be found at iFixIt.com.
Create Partitions on the SSD disk
Before one begins some definitions!
Heads = Tracks per cylinder
Sectors = Sectors per track
The goal here is to have the partitions aligned to the SSD’s Erase Block Size.
Googling around the net I found out that OCZ always uses 512Kb as Erase Block Size. If one uses fdisk with 32 Heads and 32 Sectors that makes a cylinder size of 1024b = 1Kb. Multiplying with 512 (sector size), which is fdisk’s default unit size, that makes it 512kb (=32*32*512)! Exactly the Erase Block Size that’s needed. So one needs to start fdisk issuing the following command:
# fdisk -H32 -S32 /dev/sdb
where /dev/sdb is the SSD.
It is very important to remember to start the first partition from the 2nd unit (or 512kb if you prefer). Due to MS-DOS compatibility if the first partition were to start at the first cylinder, it would skip one track. So it would actually start at 32(sectors)*512(sector size)=16Kb, messing up the alignment.
Then create necessary partitions as needed.
LVM alignment
So, the partitions on the SSD are aligned, but what if one wants to use LVM ? Then LVM’s overhead has to be taken into account as well.
To create an aligned PV based on the partitions that have already been created one needs to use the “–dataalignment” option found in newer versions of LVM utilities.
# pvcreate --dataalignment 512k /dev/sdb3
To check the alignment use the following command:
# pvs /dev/sdb3 -o+pe_start PV VG Fmt Attr PSize PFree 1st PE /dev/sdb3 ssd lvm2 a- 111.46g 81.46g 512.00k
Check that “1st PE” is what is actually needed for the alignment.
Proceed creating VGs and LVs as needed.
Formatting Partitions with ext4
There’s no reason to use ext3 on SSD, one needs to take advantage of ext4 SSD features. I prefer 4K as block size.
For a further explanation of the following formulas read Linux RAID Wiki – RAID setup
stride = chunk (Sector size) / block size = 512Kb / 4K = 128
stripe-width is usually calculated by a formula that uses multiple disks. Since there’s only one disk in this scenario, stripe-width is equal to stride.
stripe-width = 128
# mkfs.ext4 -O extent -b 4096 -E stride=128,stripe-width=128 /dev/mapper/ssd-debian
Mounting the partition
To enable SSD TRIM support, which protects the disk from wearing off, one needs to enable the discard option while mounting the partition. Edit /etc/fstab and add the discard mount option (and noatime if you want to).
/dev/mapper/ssd-deb / ext4 discard,noatime,errors=remount-ro 0 1
Note 1: As of 2.6.37 Linux Kernel supports TRIM on device mapper. Previous kernel versions will report errors upon trying to mount an LVM partition with discard mount option. If you have an older kernel either don’t use LVM on your SSD yet or upgrade your kernel!
Note 2: Read the links posted below for a complete blog post over TRIM command. Apparently it’s not always the best choice
That’s basically it…
Extra – copying the old root partition to the new disk
# mkdir /mnt/ssd/ # mount /dev/mapper/ssd-debian /mnt/ssd/ # rsync -aPEHv --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/mnt --exclude=/var/cache/apt/archives/ / /mnt/ssd/ # mkdir /mnt/ssd/dev # mkdir /mnt/ssd/proc # mkdir /mnt/ssd/sys # mkdir /mnt/ssd/mnt # cp -avp /dev/console /mnt/ssd/dev/ # cp -avp /dev/urandom /mnt/ssd/dev/ # cp -avp /dev/zero /mnt/ssd/dev/ # cp -avp /dev/random /mnt/ssd/dev/ # Edit /mnt/ssd/etc/fstab to change the device names # Update grub
Using the above commands one avoids copying unneeded directories like /dev, /sys, etc that will be recreated later. Don’t forget to at least copy the above 4 devices in the new /mnt/ssd/dev dir, else the partition won’t be bootable.
References
1. Aligning Filesystems to an SSD’s Erase Block Size (link goes to archive.org since original article has unfortunately disappeared from the web)
2. [linux-lvm] Re: Aligning PVs on SSDs?
3. Aligning an SSD on Linux (excellent article!)
4. ArchWiki – Solid State Drives
5. SSD performance tips for RHEL6 and Fedora
6. Re: [dm-devel] trim support (discard)
7. How to check TRIM is working on your SSD running Linux
8. Impact of ext4′s discard option on my SSD (very useful insight on TRIM command, read the comments as well)
Thanks
Thanks fly to @apoikos for helping me with the CDROM replacement and @faidonl for his original SSD alignment tips 🙂
Filed by kargig at 21:49 under Linux
Tags: alignment, debian, erase block size, ext4, fdisk, Linux, LVM, macbook, partitions, rsync, SSD
13 Comments | 91,568 views
You could just bind mount Your / and copy everything:
mkdir /bindroot
mount –bind / /bindroot
rsync […] /bindroot /mnt/ssd
This way You don’t need to mess up with /dev, /proc and /sys
U haz made a typo. Filesystem should be ext4, not ext3 in /etc/fstab.
typo fixed. thnx
In our data center I often leave the device clean of any partition table and format the raw device. That way you can completely ignore the who alignment stuff.
[…] Linux SSD partition alignment tips Yes, this is another post on the internet about properly aligning your SSD partitions on Linux. It’s mostly my notes that I have gathered from other posts around the net. Please read the whole post before starting to create partitions on your SSD. […]
Thanks for that summary. May I suggest an article I wrote a while back: Impact of ext4′s discard option on my SSD – https://patrick-nagel.net/blog/archives/337
In short: the discard option may not be the best choice.
Thanks for the helpful comment. I added a link to your blog post regarding the usage of TRIM.
[…] Linux SSD partition alignment tips […]
You write:
“It is very important to remember to start the first partition from the 2nd unit (or 512th cylinder if you prefer). Due to MS-DOS compatibility if the first partition were to start at the first cylinder, it would skip one track. So it would actually start at 32(sectors)*512(sector size)=16Kb, messing up the alignment.”
I think the part of the sentence “from the 2nd unit (or 512th cylinder if you prefer)” is misleading or not correct – if I use fdisk in similar situation, I get following information about the partition table (using cylinders as display unit):
#fdisk -H32 -S32 /dev/sdc
Command (m for help): p
Disk /dev/sdc: 240.1 GB, 240057409536 bytes
32 heads, 32 sectors/track, 457873 cylinders
Units = cylinders of 1024 * 512 = 524288 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xcc00037a
Device Boot Start End Blocks Id System
– so the size of the cylinder is already 512kb, so 2nd unit means also 2nd cylinder, not 512th cylinder. Or am I wrong, did not understand it correctly what you have written? Correctly could/should from my point of view be:
“from the 2nd unit (or 512kb if you prefer)”
@Artur Thanks for noticing! You were right about it, it’s been fixed now in the blog post.
Thanks for the great guide. I’m a little stuck on updating grub. When I have both the old (running) and new (ssd) logical volume filesystems mounted and run grub2-instal /dev/sda, I don’t get entries for the new root (/) in GRUB. What am I doing wrong?
[…] if I can avoid…) In particular I read: https://wiki.archlinux.org/index.php…SD_Performance , Linux SSD partition alignment tips | Into.the.Void. and SSDoptimization – Debian Wiki I am using kernel 2.6.32-5-amd64 fdisk on the ssd gives the […]
[…] you sure about that? I don't have a SSD but according to some pages on the net like this one it seems that one should only take care of proper partition alignment and that can be done using […]