Menjalankan File ISO Linux Dari Live USB Tanpa Instalasi


Saya sudah lama meninggalkan CD/DVD sebagai media boot sistem operasi Linux. Sebagai gantinya, saya mem-boot Linux dari perangkat USB Flash Drive (UFD). Cara ini sangat praktis dan lebih cepat dibandingkan dengan memakai media CD/DVD. Tapi masalah yang kemudian timbul adalah bagaimana bila saya sering memakai beberapa distro Linux yang berbeda? Membeli 1 USB Flash Drive (UFD) baru khusus untuk 1 distro Linux adalah hal yang mubazir mengingat file ISO untuk Live USB biasanya memiliki ukuran kecil.

Saya bisa saja membuat beberapa partisi berbeda di UFD, lalu men-install distro Linux yang berbeda di masing-masing partisi yang ada. Akan tetapi, pada artikel ini, saya akan mencoba sebuah cara yang lebih ringkas. Saya akan men-boot Linux langsung dari file ISO yang dijumpai di UFD. Ini merupakan fitur baru dari GRUB 2. Mengapa memilih men-boot langsung dari ISO ketimbang men-install ke partisi? Salah satu keuntungannya adalah saya bisa melakukan upgrade cukup dengan mengganti ke file ISO terbaru.

Saat ini ada beberapa tools bagi pengguna awam untuk membuat Live USB yang membaca file ISO secara langsung. Tidak seperti end-user, sebagai seorang developer, saya perlu memahami mekanisme yang terjadi. Oleh sebab itu, saya akan mencoba mem-boot file ISO SystemRescue-Cd dan Fedora yang sudah saya download. Saya perlu meletakkan file tersebut pada sebuah partisi di UFD. Sebagai latihan, saya akan meletakkannya pada sebuah partisi NTFS di folder iso. Partisi ini adalah partisi pertama sehingga saya tetap dapat menggunakannya untuk baca tulis data di sistem operasi Windows (tidak seperti Linux, Windows hanya bersedia mengenali partisi pertama dari UFD). Btw, saya memakai NTFS karena FAT32 memiliki keterbatasan dimana file memiliki ukuran maksimal 4 GB.

Bootstrap loader adalah komponen sistem operasi yang dijalankan pertama kali pada saat komputer dinyalakan. Biasanya bootstrap loader di-install pada sektor pertama harddisk (disebut juga Master Boot Record) dan sektor pertama partisi (disebut juga Boot Sector). Btw, ini sedikit berbeda pada komputer baru yang sudah mendukung Unified Extensible Firmware Interface (UEFI) sebagai pengganti BIOS. UEFI mendukung layout partisi berbeda yang disebut GUID Partition Table (GPT). Karena saya adalah pengguna komputer lama yang masih memakai BIOS, maka saya akan tetap menggunakan partisi berbasis MBR.

Masing-masing sistem operasi memiliki boostrap loader-nya masing-masing. Sebagai contoh, sistem operasi Windows memiliki bootstrap loader yang disebut sebagai NTLDR. Pada Linux, ada beberapa pilihan seperti LILO (Linux Loader) dan GRUB. Hampir semua distro Linux modern sudah memakai GRUB sebagai bootstrap loader. Salah satu kelebihan GRUB adalah ia tidak hanya bisa dipakai untuk men-bootstrap Linux tapi juga sistem operasi lain seperti Windows. GRUB menawarkan banyak fasilitas berguna sehingga boleh dibilang ia adalah sebuah sistem operasi ‘mini’ untuk menjalankan sistem operasi lainnya. Pada artikel ini, saya akan menggunakan GRUB 2 sebagai bootstrap loader pada Live USB yang akan saya buat.

Saya akan mulai dengan melakukan mounting partisi di UFD dengan perintah seperti berikut ini:

# mkdir live_usb
# mount /dev/sdb1 live_usb
# ls live_usb/iso
Fedora-Live-Desktop-x86_64-20-1.iso  systemrescuecd-x86-4.4.0.iso

Partisi pertama pada UFD saya diwakili oleh /dev/sdb1 dan UFD secara keseluruhan diwakili oleh /dev/sdb. Terlihat bahwa partisi pertama saya (bertipe NTFS) hanya berisi 2 file ISO di folder iso.

Sekarang, saya siap untuk men-install UFD pada partisi pertama dengan menggunakan perintah berikut ini:

# grub-install --boot-directory=/mnt/live_usb /dev/sdb
Installing for i386-pc platform.
grub-install: warning: your embedding area is unusually small.  core.img won't fit in it..
grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.

Mengapa saya mendapatkan pesan kesalahan seperti ini? Kode program yang bisa dikerjakan pertama kali oleh komputer adalah kode program Master Boot Record yang hanya berukuran 512 bytes! Sangat terbatas, bukan? Pada artikel Membuat Bootstraploader Untuk UFD, saya membuat sebuah bootstrap loader sederhana yang muat di MBR. Tapi sistem operasi modern memiliki bootstrap loader yang lebih kompleks. Oleh sebab itu, biasanya bootstrap loader dipisah menjadi dua tahap atau lebih. Kode program 512 bytes pertama akan membaca dan mengerjakan kode program bootstrap loader berikutnya. Pada GRUB 2, kode program tahap kedua ini disebut sebagai core.img. Dimana GRUB 2 meletakkan core.img? Belum ada konsep file system disini sehingga tidak bisa dalam bentuk file! Sebagai alternatifnya, GRUB 2 meletakkan core.img pada sektor setelah MBR dan sebelum boot sector partisi pertama. Saya memperoleh pesan kesalahan di atas karena letak boot sector partisi pertama yang terlalu ‘dempet’ dengan MBR sehingga tidak ada ruang untuk mengisi core.img.

Partisi pada UFD yang saya pakai di-format oleh Windows yang memberi terlalu sedikit jarak. Lalu apa yang harus saya lakukan? Salah satu solusi yang bisa saya tempuh adalah cukup dengan membuat ulang partisi dengan menggunakan GParted. Bila saya membuat partisi dengan GParted, nilai free space preceding (MiB) secara default adalah 1. Ini sudah cukup untuk kebutuhan GRUB 2. Saya kemudian kembali memberikan perintah grub-install seperti berikut ini:

# grub-install --root-directory=/mnt/live_usb /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.

Perintah grub-install di atas akan menulis kode program bootstrap loader pada MBR dan sektor lainnya. Saya tidak bisa melihat hasilnya secara langsung tanpa memakai tool yang membaca partisi per sektor. Selain itu, grub-install akan membuat direktori \boot pada partisi pertama. Yang ini terlihat dengan jelas dan merupakan sebuah kelebihan GRUB 2. Mengapa demikian? Ingat kembali bahwa saya menggunakan partisi NTFS yang diciptakan untuk Windows! GRUB 2 bisa membaca dan menulis ke partisi NTFS dengan baik. Hal ini tidak berlaku untuk sebaliknya; Windows tidak mengenali partisi ext4 milik Linux tanpa driver tambahan!

Bila men-boot komputer dari UFD, saya akan memperoleh tampilan seperti pada gambar berikut ini:

Tampilan CLI milik GRUB

Tampilan CLI milik GRUB

Ingat bahwa saya belum men-install sistem operasi apapun pada UFD saya. Yang muncul adalah CLI milik GRUB, bukan BASH atau terminal milik sistem operasi Linux! Membuat bootstrap loader yang punya terminal dan perintah-nya sendiri adalah sebuah usaha yang luar biasa bila dilakukan oleh pihak yang juga membuat sistem operasi. Mengapa demikian? Hal ini karena kode program bootstrap loader akan dibuang dan tidak dipakai lagi begitu kode program sistem operasi berhasil dijalankan! Tentu saja pembuat sistem operasi akan lebih memilih fokus pada kode program sistem operasi ketimbang kode program bootstrap loader yang hanya dipakai sesaat saja. GRUB berbeda karena ia memang dirancang sebagai sebuah bootstrap loader universal yang bisa dipakai pada berbagai situasi tanpa harus terikat pada satu jenis sistem operasi. Oleh sebab itu, banyak pembuat sistem operasi amatir memilih untuk memakai GRUB sebagai bootstrap loader pada sistem operasi yang mereka buat ketimbang menulis kode program bootstrap loader baru.

Menjalankan sistem operasi yang masih berada dalam bentuk file ISO (tanpa di-install) disebut sebagai loopback booting. Hal ini dapat dilakukan dengan menggunakan perintah loopback dari GRUB 2 seperti pada perintah berikut ini:

grub> loopback iso /iso/systemrescuecd-x86-4.4.0.iso

Perintah di atas akan membuat sebuah device baru dengan nama iso yang mewakili isi file ISO (yang saya letakkan pada folder iso). Saya dapat mengakses iso layaknya sebuah partisi, misalnya saya bisa melihat isi direktori di dalam file ISO dengan perintah seperti:

grub> ls (iso)/isolinux/
altker32 altker64 boot.cat chain.32 f1boot.msg f2images.msg f3params.msg f4aru
n.msg f5troubl.msg f6pxe.msg f7net.msg ifcpu64.c32 initram.igz isolinux.bin iso
linux.cfg isolinux.old kbdmap.c32 maps/ membdisk menu.c32 netboot pxelinux.0 reb
oot.c32 rescue32 rescue64 vesamenu.c32

Untuk melakukan loading kernel Linux, saya perlu menggunakan perintah linux seperti berikut ini:

grub> linux (iso)/isolinux/rescue64 isoloop=/iso/systemrescuecd-x86-4.4.0.iso

Pada perintah di atas, saya menambahkan boot parameter isoloop yang berisi lokasi file ISO. Ingat bahwa GRUB sebagai bootstrap loader sama sekali tidak berhubungan dengan kernel Linux. Oleh sebab itu, kernel harus mencari sendiri file ISO yang saya pakai di seluruh partisi yang ada. Setelah itu, ia harus men-mount root (yang mengandung direktori sepeti /etc, dsb) yang ada di ISO. Tidak semua distro Linux mendukung loopback booting! Selain itu, masing-masing kernel juga bisa memiliki nama parameter (boot options) yang berbeda untuk menentukan nama file ISO.

Berikutnya, saya perlu melakukan loading initial ram disk dengan menggunakan perintah initrd seperti berikut ini:

grub> initrd (iso)/isolinux/initram.igz

initrd akan menciptakan partisi baru di memori berdasarkan file yang sudah dipersiapkan oleh pembuat distro Linux. Partisi ini berperan sebagai root awal yang sudah berisi ‘driver’ siap pakai sehingga kernel Linux dapat melakukan inisialisasi dengan baik.

Sebagai langkah terakhir, saya memberikan perintah boot untuk mulai menjalankan Linux:

grub> boot

Tidak lama kemudian, sistem operasi Linux pada distro SystemRescue-Cd berhasil dijalankan langsung dari file ISO tanpa instalasi sama sekali.

Percobaan pertama sukses, lalu bagaimana dengan Fedora? Saya segera me-restart komputer dan memberikan perintah seperti berikut ini di GRUB:

grub> loopback iso /iso/Fedora-Live-Desktop-x86_64-20-1.iso
grub> linux (iso)/isolinux/vmlinuz0 iso-scan/filename=/iso/Fedora-Live-Desktop-x86_64-20-1.iso root=live:CDLABEL=Fedora-Live-Desktop-x86_64-20-1 rd.live.image
grub> initrd (iso)/isolinux/initrd0.img
grub> boot

Tidak seperti pada SystemRescue-cd yang memakai isoloop, boot option sebagai pengenal file ISO di Fedora adalah iso-scan/filename. Selain itu, Fedora juga tidak mendukung root=auto sehingga saya perlu memberikan nilai parameter root untuk men-instruksi-kan kernel agar melakukan mounting root yang ada di file ISO.

Akan tetapi, saya tidak berhasil men-boot Fedora! Saya menemukan pesan kesalahan seperti berikut ini:

dracut-initqueue[331]: mount: unknown filesystem type 'ntfs'
...
Warning: /dev/disk/by-label/Fedora-Live-Desktop-x86_64-20-1 does not exist

Ini adalah contoh kasus dimana bootstrap loader terkadang bisa lebih canggih dari sistem operasi! GRUB bisa membaca partisi NTFS tanpa masalah. Akan tetapi Initrd pada Fedora tidak dilengkapi dengan driver NTFS sehingga ia tidak bisa mencari file ISO yang ada dalam partisi NTFS saya. Ingat bahwa bootstrap loader hanya bertanggung jawab untuk menjalankan kernel! Mereka tidak saling berkomunikasi. GRUB akan ‘mati’ dan ‘lenyap’ setelah Fedora berhasil dijalankan (ini adalah arti kata bootstrap; telur akan hilang setelah ayam muncul!). Jadi, Initrd Fedora bertanggung jawab membaca file ISO di partisi NTFS tanpa bantuan GRUB. Karena ia tidak mampu, maka saya memperoleh pesan kesalahan.

Salah satu solusi untuk permasalahan ini adalah dengan membuat partisi yang dikenali oleh Initrd Fedora. Sebagai contoh, saya membuat partisi baru dengan tipe EXT4 dan meletakkan file ISO pada partisi tersebut. Saya bisa melakukan loopback mounting untuk partisi kedua dengan menggunakan perintah seperti berikut ini:

grub> loopback iso (hd0,2)/Fedora-Live-Desktop-x86_64-20-1.iso
grub> linux (iso)/isolinux/vmlinuz0 iso-scan/filename=/Fedora-Live-Desktop-x86_64-20-1.iso root=live:CDLABEL=Fedora-Live-Desktop-x86_64-20-1 rd.live.image
grub> initrd (iso)/isolinux/initrd0.img
grub> boot

Sekarang, Fedora berhasil di-boot dengan baik melalui ISO tanpa instalasi pada partisi di UFD.

Tentu saja saya tidak ingin selalu memberikan perintah GRUB setiap kali hendak menjalankan distro Linux di Live USB. Untuk itu, saya perlu membuat sebuah file bernama grub.cfg di folder /boot (yang dihasilkan oleh grub-install) yang isinya seperti berikut ini:

menuentry "SystemRescue-Cd 64-bit" {
  loopback iso /iso/systemrescuecd-x86-4.4.0.iso
  linux (iso)/isolinux/rescue64 isoloop=/iso/systemrescuecd-x86-4.4.0.iso
  initrd (iso)/isolinux/initram.igz
}

menuentry "SystemRescue-Cd 32-bit" {
  loopback iso /iso/systemrescuecd-x86-4.4.0.iso
  linux (iso)/isolinux/rescue32 isoloop=/iso/systemrescuecd-x86-4.4.0.iso
  initrd (iso)/isolinux/initram.igz
}

menuentry "Fedora 20 64-bit" {
  loopback iso (hd0,2)/Fedora-Live-Desktop-x86_64-20-1.iso
  linux (iso)/isolinux/vmlinuz0 iso-scan/filename=/Fedora-Live-Desktop-x86_64-20-1.iso root=live:CDLABEL=Fedora-Live-Desktop-x86_64-20-1 rd.live.image
  initrd (iso)/isolinux/initrd0.img
}

Isi dari file grub.cfg adalah perintah-perintah yang sebelumnya sudah saya kerjakan. Kali ini, bila saya melakukan boot dari Live USB, saya tidak akan menemukan CLI GRUB lagi melainkan sebuah menu yang terlihat seperti pada gambar berikut ini:

Tampilan Menu GRUB

Tampilan Menu GRUB

Saya kini memperoleh sebuah Live USB tunggal yang dapat berisi banyak distro Linux. Ini adalah solusi yang lebih baik daripada harus menghabiskan sebuah UFD tunggal untuk setiap file ISO. Selain itu, karena saya meletakkan file ISO pada partisi NTFS, maka saya masih dapat memakai Live USB untuk penyimpanan data di sistem operasi Windows, seperti yang terlihat pada gambar berikut ini:

Partisi tetap dapat dipakai di Windows

Partisi tetap dapat dipakai di Windows

Saya hanya perlu berhati-hati agar tidak menghapus folder boot dan iso secara tidak sengaja.

Perihal Solid Snake
I'm nothing...

One Response to Menjalankan File ISO Linux Dari Live USB Tanpa Instalasi

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: