Dual Slackware Current Dalam Satu Partisi

Submitted by w41lf0x on Thu, 07/20/2017 - 06:55

Selamat pagi semua,

slackwareKali ini saya akan menulis secara singkat panduan untuk memasang dua OS slackware current berbeda arsitektur (32 dan 64 bit) ke dalam satu partisi menggunakan filesystem btrfs. Harap diingat bahwa kehati-hatian amat sangat diperlukan karena teknik ini memang tidak mudah dan bukan sebuah kondisi umum atau normal. Jadi jangan pernah mengharapkan teknik ini semudah anda memasang ubuntu atau fedora di mesin anda. Jika anda memang mengharapkan kemudahan, silakan stop di sini, tutup jendela atau tab berisi halaman ini, dan buka ubuntu.com atau getfedora.org.

Seperti yang kita ketahui filesystem btrfs memiliki fitur pengelolaan storage (harddisk). Artinya btrfs tidak membutuhkan sebuah partisi dan anda dapat memformat satu atau beberapa harddisk menjadi satu volume btrfs seperti yang biasa dilakukan saat membuat konfigurasi RAID. Sila lihat artikel saya sebelumnya tentang Menggunakan BTRFS untuk beberapa harddisk. Btrfs juga memiliki fitur subvolume, yaitu sebuah fitur untuk mengalokasikan ruangan yang terisolasi di dalam volume utamanya. Anda dapat menautkan (mounting) subvolume tersebut seperti layaknya sebuah partisi dan subvolume tersebut akan memiliki akses yang terpisah dari volume atau subvolume lainnya.

Fitur subvolume inilah yang akan kita gunakan untuk memasang dua OS slackware yang berbeda arsitektur tersebut. Hal pertama yang perlu dilakukan adalah membuat partisi boot yang terpisah dari partisi btrfs. Biasanya boot loader lebih menyukai ext* sebagai partisi boot. Mungkin karena partisi ext* lebih dulu ada. Jadi terserah lah, ndak ada salahnya juga pakai ext* untuk partisi boot. Karena dalam contoh saya menggunakan disk layout GPT, maka hasilnya adalah seperti ini:

HDD
 +---> partisi bios boot
 +---> partisi boot (ext4)
 +---> partisi swap
 +---> partisi btrfs

Setelah itu saya format semua partisi yang diperlukan:

mkfs.ext4 -L boot /dev/sda2
mkswap -L swap /dev/sda3
mkfs.btrfs -L btrfs /dev/sda4

Kemudian saya membuat subvolume untuk kedua OS dan satu subvolume untuk pertukaran data (bukan /home!):

mount /dev/sda4 /mnt/btrfs
btrfs subvolume create SLK32 /mnt/btrfs/SLK32
btrfs subvolume create SLK64 /mnt/btrfs/SLK64
btrfs subvolume create DATA /mnt/btrfs/DATA

Persiapan selesai. Sebelum masuk ke instalasi OS, harap pilih salah satu OS sebagai yang berhak untuk memasang boot loader ke harddisk. Artinya hanya boleh ada SATU OS yang me-mount /dev/sda2 (partisi boot) untuk meletakkan semua kernel dari kedua OS. OS tersebut pula lah yang akan memasang boot loader ke harddisk. Saya menggunakan boot loader grub2. Misalkan kita akan menggunakan slackware64 sebagai pemegang boot loader, maka instalasi terlebih dahulu slackware64 dengan me-mount partisi boot ke /boot:

swapon /dev/sda3
mount -t btrfs -o rw,noatime,nodatacow,space_cache,subvol=SLK64 /mnt
mount /dev/sda2 /mnt/boot

Prosedur mounting di atas adalah prosedur mounting di installer slackware. Sila lihat artikel ini untuk informasi yang lebih jelas bahwa lokasi mount point installer slackware adalah /mnt. Untuk instalasi silakan ikuti petunjuk instalasi MANUAL Slackware tanpa membuat partisi dan memformat partisi, tetapi langsung me-mount partisi yang akan digunakan sebelum melakukan instalasi. Lewati bagian pemasangan boot loader karena kita akan memasangnya secara manual juga.

Sila baca kembali artikel tadi untuk mengetahui prosedur chroot ke dalam /mnt di slackware. Setelah masuk ke dalam sistem slackware, pasang boot loader grub2 ke harddisk:

grub-install /dev/sda

Kemudian kita HARUS menghapus paket kernel-huge karena kita akan menggunakan initrd untuk me-mount subvolume btrfs kita:

removepkg /var/log/packages/kernel-huge*

Lalu kita buat initrd dalam dua tahap:

cd /boot
mkinitrd -c -k versi_kernel (lihat di /lib/modules) -r /dev/sda4 -f btrfs -m btrfs:ext4 -o initrd-versi_kernel

==> Edit fstab dari initrd
cat initrd-tree/etc/fstab > fstab.btrfs

==> Tambahkan subvolume untuk slackware kita
nano fstab.btrfs

==> Isikan kira-kira seperti ini
/dev/sda4  /mnt  btrfs  rw,noatime,nodatacow,space_cache,subvol=SLK64  0  0

==> Timpa fstab di dalam direktori initrd-tree:
cat fstab.btrfs >initrd-tree/etc/fstab

==> Buat kembali initrd tanpa opsi -c (clean initrd-tree):
mkinitrd -k versi_kernel (lihat di /lib/modules) -r /dev/sda4 -f btrfs -m btrfs:ext4 -o initrd-versi_kernel

==> Lalu buat konfig grub:
grub-mkconfig -o /boot/grub/grub.cfg

Dan reboot untuk instalasi OS slackware 32-bit ke subvolume SLK32. Prosedurnya kurang lebih sama dengan perubahan/catatan sebagai berikut:

  • Subvolume yang digunakan SLK64 -> SLK32
  • Partisi boot (sda2) TIDAK di-mount ke /mnt/boot sudah jadi miliknya slackware64
  • Boot loader tidak perlu dipasang
  • kernel-huge* harus dihapus
  • initrd yang mengandung fstab dengan subvolume btrfs harus dibuat

Setelah itu reboot ke slackware64 yang sudah terpasang duluan. Kita mount subvolume slackware32 misalnya ke /mnt/hd untuk meng-copy kernel dan initrd milik slackware32:

mount -t btrfs -o ro,subvol=SLK32 /dev/sda4 /mnt/hd
cp -a /mnt/hd/boot/vmlinuz-versi_kernel /mnt/hd/boot/initrd-versi_kernel /boot/

Lalu duplikasi konfigurasi menuentry yang sudah ada di grub.cfg, misalnya seperti ini:

menuentry 'Slackware64 with Linux 4.9.37' --class slackware_14_2 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-9cee6060-f7ef-40b3-be42-ab106f261d1a' {
        load_video
        insmod gzio
        insmod part_gpt
        insmod xfs
        set root='hd0,gpt3'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3  9cee6060-f7ef-40b3-be42-ab106f261d1a
        else
          search --no-floppy --fs-uuid --set=root 9cee6060-f7ef-40b3-be42-ab106f261d1a
        fi
        echo    'Loading Linux 4.9.37 ...'
        linux   /boot/vmlinuz-generic-4.9.37 root=UUID=9cee6060-f7ef-40b3-be42-ab106f261d1a ro  rootflags=subvol=SLK64 resume=/dev/sda3
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd-4.9.37
}

menuentry 'Slackware32 with Linux 4.9.37-smp' --class slackware_14_2 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-9cee6060-f7ef-40b3-be42-ab106f261d1a' {
        load_video
        insmod gzio
        insmod part_gpt
        insmod xfs
        set root='hd0,gpt3'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3  9cee6060-f7ef-40b3-be42-ab106f261d1a
        else
          search --no-floppy --fs-uuid --set=root 9cee6060-f7ef-40b3-be42-ab106f261d1a
        fi
        echo    'Loading Linux 4.9.37-smp ...'
        linux   /boot/vmlinuz-generic-4.9.37-smp root=UUID=9cee6060-f7ef-40b3-be42-ab106f261d1a ro rootflags=subvol=SLK32 resume=/dev/sda3
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd-4.9.37-smp
}

Reboot untuk mencoba boot ke slackware 32-bit. Jika berhasil boot ke kedua OS tanpa halangan, kita tinggal menambahkan subvolume DATA ke dalam /etc/fstab dari masing-masing OS untuk pertukaran data antar kedua OS di tempat netral, misalnya /mnt/data (buat dulu direktorinya jika belum ada). Kira-kira seperti ini entry untuk /etc/fstab:

/dev/sda4  /mnt/data  btrfs  defaults,noatime,nodatacow,space_cache,subvol=DATA  0  0

Ribet? Demikianlah adanya. Semua yang non-standar atau tidak umum pastilah ribet. Kalau tidak mau ribet jangan ikuti panduan ini.

Semoga bermanfaat