9,383 bytes added, 2 years ago
no edit summary
LVM is greatly extensible and can be set up into Volume Groups.
<x404102> You make an LVM drive array on the drives. Then you partition it in two partitions, 2TB each, for both drives that makes VG volume groups. so you have 4 volume ground A0 A1 B0 B1. You put a RAID 1 on A0 and B0 and a RAID 0 on A1 and B1.
<x404102> It's not really partition it's just volume groups.
<antonizoon> I'll note this down
<x404102> Yeah LVM is recommended it's extensible. You can grow a RAID
```</pre> 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.</blockquote><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.</blockquote>* <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.</blockquote>=== 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]