9,378 bytes added, 2 years ago
no edit summary
<x404102> Yeah LVM is recommended it's extensible. You can grow a RAID
From now on, now that I understand the value and power of LVM partitioning, I will set it up for every drive I see.
== LVM (Graphical) ==
<code>system-config-lvm</code> or <code>kvpm</code>
Graphical partitioning systems are the best way to create logical volumes.
== LVM (Command Line) ==
=== Create MBR or GPT Partitions ===
First, you should format your drive with a partition table. While LVM can be installed to the entire disk without a partition table, there are severe downsides, especially if you are using a non-UEFI BIOS, and no speed advantages.
While GPT is a superior partition table format, not all BIOSes support it, especially those made before 2012 (when Windows 8 and UEFI was released for PCs). Thus, I chose to use MBR with one partition.
Use GParted to create an MBR Partition table and one Linux LVM partition. Or use <code>fdisk</code> and create one partition with type <code>8e</code> (Linux LVM).
=== Create Physical Volume ===
<blockquote>In this example, the SSD partition is at <code>/dev/sda1</code>. This may not always be the case, so be very careful.
<pre># pvcreate /dev/sda1</pre>
=== Create Volume Group ===
Now, you can create a volume group for your drive. It might be a good idea to follow a decent naming convention: one where you use your hostname.
<pre># vgcreate vg_stavatron_00 /dev/sda</pre>
You can extend it to other devices as well using <code>vgextend</code>.
<pre># vgextend vg_stavatron_00 /dev/sdc</pre>
* [ Volume Group Naming Convention]
=== Create Logical Volume ===
Now we need to create some logical volumes in the volume group. The following partitions are usually prudent choices:
<blockquote>'''Note:''' Reserve about 20% of free space above the minimum to handle increased sizes.
* <code>/boot</code> (100-200MB) - Contains the kernel and other boot information.
* <code>/</code> (15-20GB) - The root partition, containing most of the system.
* <code>/var</code> (10-12GB) - Contains many small files. The choice of file system type should consider this fact if a separate partition is used.
* Because a lot of small read/writes are made to <code>/var/</code>, which can reduce it's working lifetime, you should consider storing it on a hard drive.
* <code>/tmp</code> (tmpfs) - To significantly enhance system performance, the data in <code>/tmp</code> can be stored in RAM instead. This also reduces wear on the SSD. You can set up tmpfs after installation.
* swap - A swap partition is necessary when RAM is completely used up, or the system needs to store data for hibernation (on a laptop).
* Alternatively, you could use [ a variable-size on-demand swapfile] on an <code>ext4</code> partition. NEVER create a swapfile on a <code>brtfs</code> partition.
* You should reduce the swappiness to a very low level, such as 1.
<pre># lvcreate -L &lt;size&gt; &lt;volume_group&gt; -n &lt;logical_volume&gt;
# lvcreate -L 100M vg_stavatron_00 -n lv_boot
# lvcreate -L 20G vg_stavatron_00 -n lv_root
# lvcreate -L 15G vg_stavatron_00 -n lv_var
# lvcreate -l +100%FREE vg_stavatron_00 -n lv_home</pre>
* [ Arch Linux Wiki - Tmpfs]
=== Filesystem Formats ===
There are various filesystem formats you can choose from, and each of them bring their own benefits and disadvantages. They also have certain settings that optimize performance on SSDs.
* <code>ext4</code> - Rock solid, well tested, known to be reliable. <code>/boot</code> also requires you to use an <code>ext</code> filesystem, so this is the best choice.
* <code>/boot</code> <code>/home</code>, <code>/</code>
* <code>brtfs</code> - Relatively new, known for being bleeding edge, but offers higher performance. Make sure you use the latest kernels possible if you plan to use it.
* However, even though stability is much higher these days, <code>brtfs</code> is not stable enough in comparison to <code>ext4</code> for situations where corruption caused by the filesystem is unacceptable, in the case of the <code>/home</code> partition.
* The problem with btrfs is that when it fails, [ it fails HARD.] It also doesn't deal with random power outages very well (which can be common on a laptop) and corrupts files to the point that it can't be deleted without a &quot;btrfs check&quot;.
* In addition, with LVM you cannot resize a <code>brtfs</code> partition. On the flip side, you can make subvolumes under brtfs.
* <code>/</code>, <code>/var/</code>
Format the logical volumes you made:
<pre># mkfs.ext4 /dev/mapper/vg_stavatron_00-lv_boot
# mkfs.ext4 /dev/mapper/vg_stavatron_00-lv_root
# mkfs.ext4 /dev/mapper/vg_stavatron_00-lv_var
# mkfs.ext4 /dev/mapper/vg_stavatron_00-lv_home</pre>
* [ Stack Overflow - Why put things other than /home/ to a separate partition?]
* [ Arch Linux Wiki - File Systems: Types of File Systems]
* [ Fedora 15: Recommended Partition Scheme]
=== Is Brtfs Right for me? ===
Make backups. Always. With Brtfs snapshots, there's no excuse.
=== Copy over Data with Rsync ===
I mounted the <code>lv_home</code> partition and sent my 9GB <code>/home</code> directory over in just 30 seconds at 91MB/second.
<pre># mkdir /mnt/lv_device
# mount /dev/mapper/vg_stavatron_00-lv_home /mnt/lv_device
# rsync -aAXv /home/* /mnt/lv_device/
# umount /dev/mapper/vg_stavatron_00-lv_home</pre>
Next, I sent over <code>/var</code>. I made sure to clean up my pacman cache before doing this step.
<pre># mount /dev/mapper/vg_stavatron_00-lv_var /mnt/lv_device
# rsync -aAXv /var/* /mnt/lv_device/
# umount /dev/mapper/vg_stavatron_00-lv_var</pre>
After that, I sent over <code>/boot</code>. Unlike the previous ones, we will use the a new <code>/mnt/lv_boot</code> to reduce confusion.
<pre># mkdir /mnt/lv_boot
# mount /dev/mapper/vg_stavatron_00-lv_boot /mnt/lv_boot
# rsync -aAXv /boot/* /mnt/lv_boot/
# umount /dev/mapper/vg_stavatron_00-lv_boot</pre>
Finally, I sent over <code>/</code> with some directories excluded. I excluded <code>/home</code> and <code>/var</code> since they have their own partitions already (which need to be set in <code>fstab</code>).
<pre># mount /dev/mapper/vg_stavatron_00-lv_root /mnt/lv_device
# rsync -aAXv --exclude={&quot;/dev/*&quot;,&quot;/home/*&quot;,&quot;/var/*&quot;,&quot;/proc/*&quot;,&quot;/sys/*&quot;,&quot;/tmp/*&quot;,&quot;/run/*&quot;,&quot;/mnt/*&quot;,&quot;/media/*&quot;,&quot;/lost+found&quot;} /* /mnt/lv_device/
# umount /dev/mapper/vg_stavatron_00-lv_root</pre>
* [ Arch Linux Wiki - Full System Backup with Rsync]
=== Chroot into the root ===
Now, we need to enter the filesystem to set it up further.
<pre># arch-chroot /mnt/lv_device</pre>
=== Edit <code>fstab</code> ===
Edit your fstab to match the new configurations. In particular, you need to add mount points for the new <code>/home</code> and <code>/var</code> logical volumes, as well as SSD optimizaiton options.
Edit the <code>fstab</code>:
<pre># nano /etc/fstab</pre>
Then, edit the entry in the fstab to reference the correct root, home, and var logical volumes. Also add some SSD optimization options, such as <code>noatime</code> and <code>discard</code>. The following is what I used:
<pre>/dev/mapper/vg_stavatron_00-lv_boot /boot ext4 defaults,noatime,discard 0 2
/dev/mapper/vg_stavatron_00-lv_root / ext4 defaults,noatime,discard 0 1
/dev/mapper/vg_stavatron_00-lv_home /home ext4 defaults,noatime,discard 0 2
/dev/mapper/vg_stavatron_00-lv_var /var ext4 defaults,noatime,discard 0 0</pre>
Finally, remount all partitions.
<pre># mount -a</pre>
<blockquote>'''Note:''' LVM logical volumes should be referenced using <code>/dev/mapper/vgname-lvname</code>, not UUIDs.
=== Generate kernel and GRUB Config ===
We need to create a new Linux kernel with the LVM option, and regenerate GRUB.
First, edit your <code>/etc/mkinitcpio.conf</code> to add the <code>lvm2</code> HOOK between block and filesystems. Next, edit the following:
<pre># mkinitcpio -p linux</pre>
Then, edit <code>/etc/lvm/lvm.conf</code> and set <code>use_lvmetad = 0</code>. This disables the errant option.
Next, edit <code>/etc/default/grub</code> and add the <code>lvm2</code> hook to <code>GRUB_PRELOAD_MODULES</code>. Then regenerate grub.
<pre># grub-mkconfig -o /boot/grub/grub.cfg</pre>
Finally, install GRUB to the MBR of the drive.
<pre># grub-install /dev/sda</pre>
=== Sources ===
* [ Arch Linux Wiki - LVM: Create LVM Physical Volumes]
* [ Arch Linux WIki - LVM: Create Volume Group]
* [ Partitioning]