<div dir="ltr">Michael,<div><br></div><div>I found this blog post, but no date, <a href="http://blog.miketoscano.com/?p=307">http://blog.miketoscano.com/?p=307</a>. It seems the Ubuntu installer can be used to set up raid1 and lvm. I was surprised at the blogger used lvm and the entire drive for /, but to each his own. I assume one could still use the Ubuntu installer and add some partitions on the drive.</div><div><br></div><div>Your script is obviously more detailed, and and I am not sure the Ubuntu installer does any of the tuning you do, such as <span style="font-family:arial,sans-serif;font-size:13px">vm.swappiness=1, which I have read about in other posts as well</span>.</div><div><br></div><div>I am also curious about other viewpoints on this!</div><div><br></div><div>Thanks,</div><div><br></div><div>Mark</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Sep 5, 2014 at 6:32 AM, Michael Butash <span dir="ltr"><<a href="mailto:michael@butash.net" target="_blank">michael@butash.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Not to discourage your learning, but here's how I build my ssd's on both my desktop and laptops now universally (assuming I can cram 2 disks in).  This I've built over several years of trial and error with ssd's and various os. I made a variation for uefi booting too my asus that wouldn't do legacy, but this should work for any non-uefi/mbr build.<br>
<br>
I wouldn't mind some peer review on the process anyways, it's well notated just why I did things so I can remember later.  This was for my last stab at ubuntu, never was fully successful, then just applied it to mint, and my sanity was much better for it.<br>
<br>
<doc><br>
<br>
## boot the ubuntu desktop cd, when at desktop, hit ctrl-alt-t and spawn a console<br>
<br>
## if you need to wipe the disks, use a security erase on them<br>
## you will sometimes need to unfreeze drives, a suspend and awaken works<br>
<br>
sudo hdparm -I /dev/sda | grep froz<br>
sudo hdparm -I /dev/sdb | grep froz<br>
<br>
## make sure these are the right disks, they will be wiped.<br>
<br>
hdparm --user-master u --security-set-pass PasSWorD /dev/sda<br>
hdparm --user-master u --security-erase PasSWorD /dev/sda<br>
<br>
hdparm --user-master u --security-set-pass PasSWorD /dev/sdb<br>
hdparm --user-master u --security-erase PasSWorD /dev/sdb<br>
<br>
## at console, issue the following to install mdadm:<br>
<br>
sudo apt-get install mdadm<br>
<br>
## next, issue fdisk to partition the disks from terminal:<br>
<br>
## <a href="http://askubuntu.com/questions/8592/how-do-i-align-my-partition-table-properly" target="_blank">http://askubuntu.com/<u></u>questions/8592/how-do-i-align-<u></u>my-partition-table-properly</a><br>
<br>
## block size (file system block size, ex. 4096 or 4k)<br>
## erase head size (usually 4096 or 4k)<br>
## stripe size (same as mdadm chunk size, set. 128k)<br>
## stride: stripe size / block size (ex. 128k / 4k = 32)<br>
## stripe-width: stride * #-of-data-disks (ex. 2 disks RAID 1 is 1 data disks; 32*1 = 32)<br>
<br>
sudo fdisk -S32 -H32 -u /dev/sda<br>
n<br>
p<br>
<br>
+250M<br>
<br>
n<br>
p<br>
<br>
<br>
<br>
a<br>
1<br>
t<br>
1<br>
da<br>
t<br>
2<br>
da<br>
p<br>
w<br>
<br>
sudo fdisk -S32 -H32 -u /dev/sdb<br>
n<br>
p<br>
<br>
+250M<br>
<br>
n<br>
p<br>
2<br>
<br>
<br>
<br>
a<br>
1<br>
t<br>
1<br>
da<br>
t<br>
2<br>
da<br>
p<br>
w<br>
<br>
## build the raid now using mdadm<br>
<br>
mdadm --create /dev/md0 --auto=yes --force --name=boot0 --level=1 --chunk=128 --raid-devices=2 /dev/sda1 /dev/sdb1<br>
mdadm --create /dev/md1 --auto=yes --force --name=spv0 --level=1 --chunk=128 --raid-devices=2 /dev/sda2 /dev/sdb2<br>
<br>
## or if building with one missing<br>
<br>
mdadm --create /dev/md0 --auto=yes --force --name=boot0 --level=1 --chunk=128 --raid-devices=2 /dev/sda1 missing<br>
mdadm --create /dev/md0 --auto=yes --force --name=spv0 --level=1 --chunk=128 --raid-devices=2 /dev/sda2 missing<br>
<br>
## create secure physical volume, 0, change $pw-user*.  This provides slot 0-7, 0-3 admin, 4-7 user.<br>
## we control slots 0-3, users are given 4-7 (assuming multi-user or l-user)<br>
<br>
## <a href="http://java-hamster.blogspot.com/2012/04/aligning-partitions-lvm-and-encrypted.html" target="_blank">http://java-hamster.blogspot.<u></u>com/2012/04/aligning-<u></u>partitions-lvm-and-encrypted.<u></u>html</a><br>
## <a href="http://newspaint.wordpress.com/2012/09/21/full-disk-encryption-on-xubuntu-precise-12-04/" target="_blank">http://newspaint.wordpress.<u></u>com/2012/09/21/full-disk-<u></u>encryption-on-xubuntu-precise-<u></u>12-04/</a><br>
## <a href="http://security.stackexchange.com/questions/40208/recommended-options-for-luks-cryptsetup" target="_blank">http://security.stackexchange.<u></u>com/questions/40208/<u></u>recommended-options-for-luks-<u></u>cryptsetup</a><br>
<br>
## default, uses essiv-256, cpu-intensive<br>
<br>
## cryptsetup --align-payload=8192 luksFormat /dev/md/spv0<br>
## intelni optimized, sha256, 256bit<br>
<br>
cryptsetup --align-payload=8192 -c aes-xts-plain64 -h sha256 -s 256 luksFormat /dev/md1<br>
YES<br>
$pw-slot0-diskmaster0<br>
<br>
## add secondary user key, change $pw-user*<br>
<br>
cryptsetup luksAddKey --key-slot 4 /dev/md1<br>
$pw-slot4-user0<br>
<br>
## confirm there are two slots, the master (0) and user (4)<br>
<br>
cryptsetup luksDump /dev/md1<br>
<br>
## remove a slot<br>
<br>
cryptsetup luksRemovekey --key-slot 4 /dev/md1<br>
<br>
## unlock the spv0<br>
<br>
cryptsetup luksOpen /dev/md/spv0 spv0<br>
<br>
<pass><br>
<br>
## create pv for lvm on spv0<br>
<br>
## <a href="http://java-hamster.blogspot.com/2012/04/aligning-partitions-lvm-and-encrypted.html" target="_blank">http://java-hamster.blogspot.<u></u>com/2012/04/aligning-<u></u>partitions-lvm-and-encrypted.<u></u>html</a><br>
<br>
pvcreate --dataalignment 4m /dev/mapper/spv0<br>
<br>
## create volgroup $hostname-vg0 on spv0 - use the hostname of the local device (tpm locked anyways in bios - theoretically)<br>
<br>
## <a href="http://java-hamster.blogspot.com/2012/04/aligning-partitions-lvm-and-encrypted.html" target="_blank">http://java-hamster.blogspot.<u></u>com/2012/04/aligning-<u></u>partitions-lvm-and-encrypted.<u></u>html</a><br>
<br>
vgcreate $hostname-vg0 -s 4m /dev/mapper/spv0<br>
<br>
## create your logical volumes<br>
<br>
lvcreate --size 3G --name root0 $hostname-vg0<br>
lvcreate --size 3G --name swap0 $hostname-vg0<br>
lvcreate --size 9G --name usr0 $hostname-vg0<br>
lvcreate --size 3G --name var0 $hostname-vg0<br>
lvcreate --size 1G --name varlog0 $hostname-vg0<br>
lvcreate --size 64G --name home0 $hostname-vg0<br>
lvcreate --size 64G --name ext0 $hostname-vg0<br>
<br>
## make ext4 partitions, match stripe/stride with md chunks<br>
## need to add bit about setting inode counts here...<br>
<br>
mkfs.ext2 -b 4096 -E stride=32,stripe-width=32 /dev/md0<br>
mkfs.ext4 -b 4096 -E stride=32,stripe-width=32 /dev/mapper/$hostname--vg0-<u></u>root0<br>
mkfs.ext4 -b 4096 -E stride=32,stripe-width=32 /dev/mapper/$hostname--vg0-<u></u>usr0<br>
mkfs.ext4 -b 4096 -E stride=32,stripe-width=32 /dev/mapper/$hostname--vg0-<u></u>var0<br>
mkfs.ext4 -b 4096 -E stride=32,stripe-width=32 /dev/mapper/$hostname--vg0-<u></u>varlog0<br>
mkfs.ext4 -b 4096 -E stride=32,stripe-width=32 /dev/mapper/$hostname--vg0-<u></u>home0<br>
mkfs.ext4 -b 4096 -E stride=32,stripe-width=32 /dev/mapper/$hostname--vg0-<u></u>ext0<br>
<br>
tune2fs -c0 -i0 /dev/md0<br>
tune2fs -c0 -i0 /dev/mapper/$hostname--vg0-<u></u>root0<br>
tune2fs -c0 -i0 /dev/mapper/$hostname--vg0-<u></u>usr0<br>
tune2fs -c0 -i0 /dev/mapper/$hostname--vg0-<u></u>var0<br>
tune2fs -c0 -i0 /dev/mapper/$hostname--vg0-<u></u>varlog0<br>
tune2fs -c0 -i0 /dev/mapper/$hostname--vg0-<u></u>home0<br>
tune2fs -c0 -i0 /dev/mapper/$hostname--vg0-<u></u>ext0<br>
<br>
## mkswap<br>
<br>
mkswap /dev/mapper/vg0-swap<br>
<br>
## make/mount target dir<br>
mkdir /target<br>
mount /dev/mapper/$hostname--vg0-<u></u>root0 /target<br>
mkdir /target/boot<br>
mkdir /target/usr<br>
mkdir /target/var<br>
mkdir /target/home<br>
mkdir /target/mnt<br>
mkdir /target/mnt/ext0<br>
<br>
mount /dev/mapper/$hostname--vg0-<u></u>usr0 /target/usr<br>
mount /dev/mapper/$hostname--vg0-<u></u>var0 /target/var<br>
mount /dev/mapper/$hostname--vg0-<u></u>home0 /target/home<br>
mount /dev/mapper/$hostname--vg0-<u></u>ext0 /target/mnt/ext0<br>
mount /dev/md0 /target/boot<br>
mkdir /target/var/log<br>
mount /dev/mapper/$hostname--vg0-<u></u>varlog0 /target/var/log<br>
<br>
## continue the installer and get to partition, use "manual"<br>
<br>
## enable all the partitions and set the mount structure<br>
<br>
## set "yes" to boot failed raid<br>
<br>
## continue installing<br>
<br>
## at grub, use mbr to install<br>
<br>
## before rebooting, vi the /etc/crypttab file and add contents for uuid<br>
<br>
ls -la /dev/disk/by-uuid | grep md1 | awk '{ print $9 }' >> /target/etc/crypttab<br>
<br>
<><br>
# <target name> <source device>         <key file>      <options><br>
## example<br>
## spv0 UUID=5f694a41-f8c6-4da1-8679-<u></u>8263e8642eb1       none luks,retry=1,discard<br>
spv0    UUID=$uuid-here     none    luks,retry=1,discard<br>
<br>
<><br>
<br>
## if you need/want to remount chroot to install or fix, add device dir's to chroot and enter<br>
<br>
mount --rbind /proc /target/proc<br>
mount --rbind /sys /target/sys<br>
mount --rbind /dev /target/dev<br>
mount --rbind /run /target/run<br>
<br>
chroot /target<br>
bash<br>
<br>
apt-get update<br>
apt-get install mdadm cryptsetup lvm2<br>
<br>
## make your fstab and modify the boot disk to be the correct uuid from the table<br>
<br>
ls -la /dev/disk/by-uuid | grep md0 | awk '{ print $9 }' >> /etc/fstab<br>
vi /etc/fstab<br>
<br>
<><br>
# UNCONFIGURED FSTAB FOR BASE SYSTEM<br>
proc    /proc    proc    defaults                        0 0<br>
tmpfs    /tmp    tmpfs    defaults,noatime,nodiratime,<u></u>mode=1777         0 0<br>
/dev/mapper/$hostname--vg0-<u></u>root0    /    ext4 defaults,noatime,nodiratime    0 1<br>
UUID=218b2c98-3f7e-4008-950c-<u></u>b99e3d6dabab    /boot    ext2 defaults,noatime,nodiratime    0 1<br>
/dev/mapper/$hostname--vg0-<u></u>usr0    /usr    ext4 defaults,noatime,nodiratime    0 2<br>
/dev/mapper/$hostname--vg0-<u></u>var0    /var    ext4 defaults,noatime,nodiratime    0 2<br>
/dev/mapper/$hostname--vg0-<u></u>varlog0    /var/log    ext4 defaults,noatime,nodiratime    0 2<br>
/dev/mapper/$hostname--vg0-<u></u>home0    /home    ext4 defaults,noatime,nodiratime    0 2<br>
/dev/mapper/$hostname--vg0-<u></u>ext0    /mnt/ext0    ext4 defaults,noatime,nodiratime,<u></u>commit=600    0 2<br>
/dev/mapper/$hostname--vg0-<u></u>swap0    none    swap    sw,discard 0 0<br>
<br>
<><br>
<br>
## ensure these are correct too<br>
<br>
vi /etc/crypttap<br>
vi /etc/mdadm/mdadm.conf<br>
<br>
update-initramfs -k all -t<br>
grub-install /dev/sda<br>
grub-install /dev/sdb<br>
update-grub<br>
grub-install /dev/sda<br>
grub-install /dev/sdb<br>
<br>
## set and make a udev rule for setting scheduler to deadline<br>
<br>
echo deadline > /sys/block/sdb/queue/scheduler<br>
<br>
vi /etc/udev/rules.d/60-ssd-<u></u>scheduler.rules<br>
<br>
<><br>
# set deadline scheduler for non-rotating disks<br>
<br>
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="<u></u>deadline"<br>
<><br>
<br>
## edit lvm.conf to change discards to =1<br>
<br>
vi /etc/lvm/lvm.conf<br>
<br>
<><br>
issue_discards = 1<br>
<><br>
<br>
# issue vm.swappiness to +1 now<br>
<br>
<><br>
sysctl -w vm.swappiness=1<br>
<><br>
<br>
## add into sysctl<br>
<br>
vi /etc/sysctl.d/ssd-<u></u>optimization.conf<br>
<br>
<><br>
# Added so Linux kernel no longer attempts to enlarge the cache by paging applications out<br>
# <a href="http://rudd-o.com/linux-and-free-software/tales-from-responsivenessland-why-linux-feels-slow-and-how-to-fix-that" target="_blank">http://rudd-o.com/linux-and-<u></u>free-software/tales-from-<u></u>responsivenessland-why-linux-<u></u>feels-slow-and-how-to-fix-that</a><br>
<br>
vm.swappiness=1<br>
<><br>
<br>
## test the disks, get them closed to zero<br>
<br>
sync<br>
echo 3 > /proc/sys/vm/drop_caches<br>
time dd if=/dev/zero of=/mnt/ext0/incoming/testfile count=1 bs=900M<br>
<br>
sysctl -w vm.vfs_cache_pressure=100<br>
find / > /dev/null<br>
cp /mnt/ext0/incoming/testfile /mnt/ext0/incoming/testfile2<br>
time find / > /dev/null<br>
<br>
sysctl -w vm.vfs_cache_pressure=50<br>
find /  > /dev/null<br>
cp /mnt/ext0/incoming/testfile2 /mnt/ext0/incoming/testfile3<br>
time find / > /dev/null<br>
<br>
rm -f /mnt/ext0/incoming/testfile /mnt/ext0/incoming/testfile2 /mnt/ext0/incoming/testfile3<br>
<br>
## add permenantly cat into sysctl under prior entry<br>
<br>
vi /etc/sysctl.d/ssd-<u></u>optimization.conf<br>
<br>
<><br>
<br>
## add for filesystem caching<br>
<br>
vm.vfs_cache_pressure=50<br>
<><br>
<br>
</doc><br>
<br>
-mb<span class=""><br>
<br>
<br>
On 09/04/2014 10:19 AM, Mark Phillips wrote:<br>
</span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Michael,<br>
<br><span class="">
Thanks again for your comments, they are very helpful. I have been googling RAID1 and LVM and finding lots of good information.<br>
<br>
I really like your idea of a RAID1 for the two SSDs. Does it matter if one is msata and one is not?<br>
<br>
I am trying to decide on the merits of using LVM with the RAID1, since I only have 1 disk and I normally don't partition it so I don't have to worry about running our of space until the disk is almost full. Could you explain to me the benefit of using LVM + RAID1 for these two drives? How would you partition the drives? My current drive has about 420 GB of data in /home, about 9GB in /opt, and some misc stuff in /var, all of which I need to transfer that to the new system.<br>
<br>
Thanks,<br>
<br>
Mark<br>
<br>
P.S. One benefit of using both LVM and RAID1 is learning something new! ;)<br>
<br>
</span></blockquote>
</blockquote></div><br></div>