Mengapa nomor drive / partisi masih digunakan?


14

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.cfglihat 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:

  1. 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?

  2. 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?


4
BIOS menggunakan nomor drive, UEFI dapat menggunakan nomor (tidak yakin apakah dapat menggunakan UUID juga) dan grub dll. Hanya memetakan UUID ke nomor yang digunakan. Jadi, bahkan jika Anda meletakkan UUID di setiap file konfigurasi, kemungkinan besar bahwa pada level yang lebih rendah itu masih nomor drive. Nomor driver tergantung pada BIOS / UEFI / perangkat keras dan "tidak stabil", nomor partisi didefinisikan dengan baik dan "stabil".
dirkt

4
Saya perhatikan Anda berbicara tentang UEFI. Perhatikan bahwa UEFI hanya ada di sekitar 10% dari platform yang didukung Linux, bahkan lebih sedikit jika Anda menyertakan Unixoids dan Unixoids lain. Bahkan, bahkan pada arsitektur CPU yang digunakan UEFI (IA-32, AMD64, dan IA-64), ada sistem non-UEFI. PC sebelum UEFI menggunakan sesuatu yang disebut "BIOS", dan PC berbasis BIOS masih ada. Plus, ada platform berbasis x86 / AMD64 non-PC yang menggunakan misalnya OpenFirmware, coreboot, atau kadang-kadang bahkan tidak ada firmware platform sama sekali! Tidak semua sistem file memiliki UUID. Tidak semua skema partisi memiliki UUID. Dan seterusnya ...
Jörg W Mittag

@ Jörg W Mittag masuk akal! Saya telah menemukan bahwa cukup diterima bahwa booting BIOS akan "mungkin" bekerja sebagian besar waktu dan orang-orang tidak mempertanyakannya karena itu digunakan secara luas. Saya ingin tahu apakah UEFI telah memperbaiki beberapa masalah yang disebutkan di atas dengan BIOS yang tidak memiliki jaminan implementasi, tetapi sepertinya kami masih mengandalkannya agar berfungsi dengan "cukup baik". Oh well ... Saya hanya akan membuatnya bekerja dan tidak menyentuhnya.
quixotrykd

Jawaban:


13

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:

search --no-floppy --fs-uuid --set=root 74686973-6973-616e-6578-616d706c650a

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".


Saya kembali dan melihat, dan Anda benar bahwa saya pasti melewatkan baris berikutnya dalam file konfigurasi saya - itu jauh lebih masuk akal. Entri boot UEFI saya juga menggunakan penomoran mentah ini (misalnya, SATA (0x3, 0x0, 0x0). Apakah ini berarti bahwa entri boot UEFI saya juga akan berhenti berfungsi jika saya memindahkan drive saya?
quixotrykd

1
@quixotrykd Saya tidak tahu. Saya tidak akan terkejut jika tidak ditentukan oleh standar apa pun dan akibatnya tergantung pada implementasi EFI tertentu dari sistem Anda.
Hermann

Ini juga tidak stabil dengan perangkat NVMe, nomor perangkat tergantung pada urutan deteksi bukan urutan slot, setidaknya saya memiliki beberapa mesin di mana NVMes berbasis kartu PCIe mengganti nomor mereka (setelah reboot dan mungkin pembaruan kernel)
eckes

20

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) disebut findfs, 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 ddkecelakaan 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). Jikahd0 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,gpt2itu 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 ...

Tidak ada standar generik untuk label, itu semua rajutan tangan, lihat misalnya penerapan format superblok ini di util-linux . Jika Anda membuat sistem file baru besok, bahkan jika ia memiliki label, itu tidak akan muncul sampai dukungan ditambahkan.

... dan itu hampir sama untuk UUID.


(★★) Sebenarnya, GRUB searchmemiliki --hintpilihan, 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 tahu searchuntuk 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.


5

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 seperti

/dev/sda1    /
/dev/sda9    /boot/efi
/dev/sdb1    /mnt/root
/dev/sdb9    /mnt/efi

Jadi, Anda membuat 2 drive identik dari gambar yang sudah ada, yang disediakan penyedia, cloud-ready, sambungkan ke VM baru dan boot. Tentu saja,

  • Semua distro OS modern, Ubunzima 04.18 imajiner kita tidak terkecuali, bergantung pada mount yang diberi nama UUID.
  • Semua hard drive yang diluncurkan dari gambar yang sama memiliki UUID yang sama. UUID itu unik, jadi apa yang salah?

Anda sudah melihat ke mana semua ini terjadi.

Pertama kali frankencontraption ini di-boot, ia memilih sda9sebagai partisi boot EFI, tetapi Linux memutuskan untuk melakukan remount sdb1sebagai root FS:

/dev/sda1    /mnt/root
/dev/sdb1    /
/dev/sda9    /boot/efi
/dev/sdb9    /mnt/efi

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 /devtautan, 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 hd0dan sistem sebagai sda.

  • 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 Anda sde, dan yang kedua dan satu-satunya yang lain sdc². 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, eth0adalah 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 selalu eth0, 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 mereka mengubah penyedia atau perangkat lunak hypervisor VM.


3

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.


2

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/xxxnama 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.