Sering kali, terutama ketika bermain-main dengan boot-loader, saya akan melihat drive numerik dan nomor partisi yang digunakan. Sebagai contoh, pada saya /boot/grub/grub.cfg
lihat set root='hd0,gpt2'
, entri boot UEFI saya sering merujuk nomor drive / partisi, dan tampaknya muncul di hampir semua konteks yang terkait dengan bootloader.
Sekarang setelah kita memiliki UUID dan PARTUUID, menangani partisi dengan cara ini tampaknya sangat tidak stabil (afaik, drive tidak selalu dijamin untuk dipasang dalam urutan yang sama, pengguna dapat memindahkan urutan drive yang terhubung ke mobo mereka, dll.)
Karena itu pertanyaan saya ada dua:
Apakah skema pengalamatan ini tidak stabil seperti yang telah saya uraikan di atas? Apakah saya kehilangan sesuatu dalam standar yang berarti skema ini jauh lebih dapat diandalkan daripada yang saya harapkan, atau akankah skema pengalamatan ini benar-benar membuat sistem Anda tidak dapat di-boot (sampai Anda paling tidak memperbaiki entri boot Anda) karena drive Anda hanya dikenali dalam urutan yang berbeda atau menghubungkannya ke slot yang berbeda pada motherboard Anda?
Jika jawaban untuk pertanyaan di atas adalah ya, lalu mengapa skema pengalamatan ini terus digunakan? Bukankah menggunakan UUID atau PARTUUID untuk semuanya jauh lebih stabil, dan konsisten?
Jawaban:
Skema penomoran polos tidak benar-benar digunakan dalam sistem baru-baru ini (dengan "baru-baru ini" adalah Ubuntu 9 dan kemudian, distribusi lain mungkin telah diadaptasi di era itu juga).
Anda benar dalam mengamati partisi root diatur dengan skema penomoran polos. Tapi ini hanya pengaturan default atau mundur yang biasanya diganti dengan perintah berikutnya, seperti:
Ini memilih partisi root berdasarkan UUID sistem file.
Dalam praktiknya, skema penomoran biasa biasanya stabil (selama tidak ada perubahan perangkat keras). Satu-satunya contoh yang saya amati adalah penomoran yang tidak dapat diprediksi adalah sistem dengan banyak USB-drive yang dihitung berdasarkan pola melayani siapa-cepat-pertama dan kemudian ditiru sebagai drive IDE. Tak satu pun dari proses ini secara inheren kacau, jadi saya menganggap masalah dalam implementasi sistem BIOS tertentu.
Catatan: "partisi root" dalam konteks ini berarti partisi untuk boot, mungkin berbeda dari partisi yang berisi "root alias. / Sistem file".
sumber
Sebenarnya, UUID tidak membahas sama sekali.
Mengatasi sangat, sangat sederhana: baca drive X sektor Y - atau yang lain. Baca alamat memori Z - atau yang lain. Mengatasi itu sederhana, cepat, tidak banyak ruang untuk interpretasi, dan ada di mana-mana.
UUID tidak menangani. Sebaliknya itu mencari, menemukan, kadang-kadang menunggu perangkat muncul, dan juga memahami sistem file (★). Dan tergantung berapa banyak perangkat yang ada, mungkin butuh waktu yang sangat lama. Dan begitu ditemukan, kembali ke pengalamatan biasa itu.
Dalam GRUB, ini disebut
search
(★★) dan ini hanya tersedia ketika GRUB telah mengembangkan sayap (pencarian adalah modul, seperti setiap sistem file yang didukungnya, sehingga hanya tersedia setelah memuat inti). Di Linux, itu (misalnya) disebutfindfs
, findfs akan mencari perangkat blok di sistem mencari sistem file atau partisi .Ia melewati semua perangkat blok, membangunkannya dari siaga, membaca data, dan hasilnya mungkin masih acak jika UUID tidak unik sebagaimana mestinya (setelah
dd
kecelakaan atau sejenisnya), atau Anda tidak mendapatkan hasil jika UUID berubah - UUID juga rentan terhadap kesalahan konfigurasi.Secara umum, UUID sangat bagus, dan tentu saja Anda harus menggunakannya di mana-mana jika tersedia, terutama ketika pengalamatan tradisional pasti gagal karena urutan drive acak di Linux; tetapi pahamilah bahwa kerumitannya ada di atas dan di luar apa yang dimaksudkan dengan pengalamatan sederhana. Dan terutama pada tahap awal bootloader, itu mungkin belum menjadi pilihan. Mengatasi masalah didahulukan, sayap yang tumbuh datang kemudian.
Untuk bootloader, mungkin tidak perlu melakukan upaya (tidak setiap bootloader mendukung berbagai filesystem seperti GRUB). Jika
hd0
dijamin sebagai "disk yang kami boot dari" karena keadaan (BIOS menyediakan), dan jadi jika Anda dapat mengesampingkan masalah urutan drive acak, mungkin tidak perlu melalui daftar yang berpotensi besar dari partisi lain di mencari UUID.Jika Anda cukup percaya diri dalam konfigurasi Anda untuk mengatakan bahwa
hd0,gpt2
itu yang Anda inginkan, dan itu harus, dan tidak bisa sebaliknya, maka tidak ada yang salah dengan menggunakannya seperti itu. Terkadang, pengalamatan yang sederhana dan sederhana bekerja dengan baik.(★) Saya sebelumnya menjelaskan ini untuk LABEL di sini ...
... dan itu hampir sama untuk UUID.
(★★) Sebenarnya, GRUB
search
memiliki--hint
pilihan, dan ... sekarang saya belum memeriksa kode sumbernya, dan itu bahkan tidak didokumentasikan dalam manual mereka, tetapi opsi seperti itu masuk akal untuk memberi Anda yang terbaik dari kedua dunia: petunjuk harus memberi tahusearch
untuk memeriksa partisi itu terlebih dahulu , dan jika UUID sesuai dengan yang diharapkan, itu mengidentifikasi perangkat dengan upaya minimal , dan jika tidak cocok, itu masih akan kembali ke pencarian penuh sesak untuk menjaga semuanya berfungsi entah bagaimana .Selain itu, UUID yang ditemukan sebelumnya cenderung di-cache, sehingga tidak harus melalui semua perangkat lagi dan lagi dan lagi - dan ini juga berfungsi dengan baik, asalkan UUID yang Anda cari sebenarnya ada di suatu tempat untuk membuatnya menjadi cache di tempat pertama.
sumber
Juga jangan lupa label. Mereka tidak seunik UUID, tetapi jauh lebih informatif, dan membuat fstab Anda dapat dibaca oleh manusia. Jika desktop Anda, atau perusahaan kecil - dengan kata lain, Anda mengelola beberapa hingga beberapa lusin drive, Anda dapat memilih label untuk UUID.
Memikirkan jawaban yang sangat baik dari @ frostschutz untuk pertanyaan Anda, salah satu skenario di mana Anda lebih suka pengalamatan tautan perangkat "klasik" adalah pengaturan VM, terutama di cloud VM-for-hire (disingkat, membingungkan, "IaaS"). Misalkan Anda ingin menyesuaikan gambar Ubunzima 04.18 . Anda membuat VM (sekali pakai) dengan 2 disk: satu akan menjadi drive sistem (sekali pakai), dan yang kedua yang Anda pasang dan sesuaikan. Agaknya, Anda juga me-mount partisi boot UEFI-nya, jika Anda ingin grub grub yang lebih baru pada disk baru Anda. Dengan asumsi Anda telah memilih poin mount untuk partisi target di bawah
/mnt
, tabel mount yang Anda inginkan terlihat sepertiJadi, Anda membuat 2 drive identik dari gambar yang sudah ada, yang disediakan penyedia, cloud-ready, sambungkan ke VM baru dan boot. Tentu saja,
Anda sudah melihat ke mana semua ini terjadi.
Pertama kali frankencontraption ini di-boot, ia memilih
sda9
sebagai partisi boot EFI, tetapi Linux memutuskan untuk melakukan remountsdb1
sebagai root FS:Dan karena skrip roll-out saya tidak siap untuk itu, saya punya gambar tak dapat di-boot pada akhirnya, tanpa alat tunggal mengeluh di log selama frankenbuild!
Tentu saja saya mencetak tabel mount di log. Dan tentu saja kekacauan itu sangat sulit dikenali, karena mount (8) mencetak mount secara berurutan antara random dan di mana perangkat dipasang, jadi tidak mengherankan saya tidak langsung menemukannya. Dan bayangkan, skrip yang sama (tetapi dengan disk dari gambar yang berbeda) sebelumnya bekerja semulus Glenfiddich yang berusia 15 tahun. Coba tebak berapa jam yang saya habiskan untuk menarik rambut saya¹ ke atas balok kayu untuk mencari tahu masalahnya?
Tidak ada aturan keras dan cepat yang baik untuk situasi apa pun, dari PC desktop ke Linux yang tertanam di router ke ponsel Android Anda ke pusat data cloud. Jawaban SO seharusnya objektif, dan pengalaman atau preferensi saya, tentu saja, tidak. Jadi saya lebih suka menunjukkan contoh penalaran logis ketika memilih di antara metode yang berbeda untuk mengidentifikasi partisi:
Biarkan saja jika Anda tidak punya alasan untuk tidak melakukannya. UUID adalah standar untuk sebagian besar distro modern. Jika perlu menambahkan drive kedua, coba dan putuskan. Kemungkinannya adalah Anda bahkan tidak perlu tahu. Jika sistem Anda masih melakukan booting dan Anda dapat melihat dan mempartisi perangkat baru, format dan tambahkan ke fstab (oleh UUID, oleh LABEL atau dengan
/dev
tautan, pertimbangan yang sama berlaku). Hanya ketika sistem Anda menolak untuk boot setelah mencolokkan drive tambahan, maka Anda memiliki masalah (dan mungkin mengubah urutan boot di UEFI BIOS adalah jalan keluar tercepat).Secara pragmatis, memberi label pada konektor SATA mana yang mengarah ke drive di desktop Anda sendiri mungkin merupakan solusi tercepat dan termudah, sambil mengubah cara sistem melakukan booting dan memulihkan dari kemungkinan kegagalan boot yang cukup besar, bisa dibilang, penakluk waktu terburuk. Tetapi jika Anda mengelolanya untuk 50 programmer yang berpikir bahwa melempar drive tambahan bukanlah masalah yang pantas untuk Anda, setidaknya jangan menguji batas keberuntungan Anda dan pastikan boot drive awal mereka semua dilihat oleh grub
hd0
dan sistem sebagaisda
.Label untuk mengelola drive dan partisi Anda sendiri di desktop atau tiga Anda, atau lingkungan kecil (ruang duduk rumah yang penuh dengan insinyur perangkat lunak yang lucu menyebut tempat itu "kantor startup"). Jika Anda menarik drive fisik dari mesin seseorang, Anda tahu dari mana asalnya jika Anda menggunakan label secara konsisten.
Jika lsblk (8) mengatakan
LABEL=bubba-boot
, Anda tahu itu telah ditarik dari mesin yang disebut bubba ; selain itu, bubba-boot berguling -guling di atas lidah saya jauh lebih mudah daripada 6864c4ea-f9b9-46db-b875-4d7fc2981007 , yang, menurut selera saya yang manja, benar-benar pelawak. Memastikan bahwa label itu unik sekarang bergeser kepada Anda, tetapi apa yang Anda dapatkan sebagai imbalan adalah kebermaknaan label itu./dev
-nama penamaan berdasarkan ketika memerintahkan batalyon VM yang relatif pendek, pemeliharaan rendah yang merupakan bibit dari gambar yang sama, dan Anda tidak akan bertaruh upah mingguan Anda bahwa semua UUID mereka sesuai dengan janji UU. Setiap layanan VM yang waras , baik itu Vyper-H di server fisik Anda sendiri atau Kugel Cloud atau apa pun, tidak akan pernah memanggil boot drive Andasde
, dan yang kedua dan satu-satunya yang lainsdc
². Di mesin fisik, di sisi lain, Anda dapat dengan mudah mendapatkan pengaturan yang sama dengan menghubungkan kabel SATA secara kreatif.Saya ngelantur sekarang, tetapi dalam skenario ini, saya pergi rute yang sama dengan apa yang disebut penamaan antarmuka Ethernet "konsisten": nonaktifkan dalam VMs. Jangan salah paham, penamaannya benar-benar konsisten selama NIC yang Anda masukkan ke dalam slot PCI 4 tidak akan tiba-tiba melompat ke slot 5 pada kemauannya sendiri saat Anda tidak melihat (atau mungkin bahkan saat Anda sedang berada; NICs jangan malu sama sekali). Sayangnya, di lingkungan "batalyon VMs" mereka sebenarnya melakukannya. Dalam hal ini, counter-intuitif,
eth0
adalah lebih konsisten daripadaenp0s4f6
. Penyedia VM tidak berjanji untuk selalu menempatkan nomor virtual NIC 1 mereka di slot 4 pada bus PCI 0 (dan tidak satu pun dari 3 entitas yang disebutkan secara fisik nyata), dan bahwa itu akan selalu menjadi Fungsi 6. Tapi Anda bisa cukup banyak bergantung pada antarmuka pertama sebelum yang kedua, mengingat mereka biasanya memiliki modul driver yang sama, umumnya dari keluarga virtio (dan jika NIC pertama tidak selalueth0
, note² yang sama masih berlaku).¹ Secara kiasan, tentu saja. Saya sudah jika bisnis ini terlalu lama untuk memiliki yang tersisa.
² Jika mereka melakukannya, saya akan dengan serius mempertimbangkan untuk
melarikan diri berteriak dari merekamengubah penyedia atau perangkat lunak hypervisor VM.sumber
Kedua skema dapat dicampur dan dicocokkan dengan sebagian besar distribusi linux.
Konsekuensi dapat diinginkan atau tidak diinginkan tergantung pada kasus penggunaan - misalnya, orang mungkin lebih suka skema yang lebih lama (dan bahkan menonaktifkan hack persistence gaya udev) jika penggantian hot drive (perangkat keras virtual atau perangkat keras aktual) tanpa harus memodifikasi file konfigurasi adalah ingin.
sumber
Jawaban untuk pertanyaan kedua Anda ("mengapa skema pengalamatan ini terus digunakan?") Adalah, saya kira, inersia. Ya, sangat mungkin untuk menggunakan hanya UUID pada disk yang dipartisi GPT. Anda dapat menggunakan UUID alih-alih
/dev/xxx
nama dalam/etc/fstab
. Dan sekarang kami memiliki Spesifikasi Partisi yang Dapat Ditemukan , dalam banyak kasus Anda bahkan tidak perlu menentukan UUID lagi, cukup partisi disk Anda dengan jenis partisi dan partisi akan diambil secara otomatis. Di komputer saya,root=
entri hilang sama sekali dari baris perintah kernel.Dan berbicara tentang boot loader: GRUB sebagian besar berlebihan pada PC UEFI modern, dalam arti bahwa itu sangat sedikit hubungannya dengan bootstrap mesin. Saat ini GRUB hanya berfungsi sebagai program pemilih kernel, yang tugasnya ada alternatif yang lebih sederhana dan lebih baik, seperti systemd-boot.
sumber