Perbedaan antara UUID dari blkid dan mdadm?


26

Adakah yang bisa menjelaskan perbedaan antara UUID yang dilaporkan oleh blkiddan mdadm? Di salah satu sistem CentOS kami, misalnya:

[root@server ~]# blkid | grep /dev/md1
/dev/md1: UUID="32cb0a6e-8148-44e9-909d-5b23df045bd1" TYPE="ext4"

[root@server ~]# mdadm --detail /dev/md1 | grep UUID
UUID : f204c558:babf732d:85bd7296:bbfebeea

Mengapa mereka berbeda dan bagaimana kita mengubah UUID yang digunakan oleh mdadm?

Saya mengerti bahwa kami akan menggunakan tune2fsuntuk mengubah UUID untuk partisi (yang akan mengubah apa yang dikembalikan oleh blkid) tetapi tidak yakin bagaimana mengubah mdadmpenggunaan apa .

Jawaban:


23

Yang pertama melaporkan UUID sistem file ext4 pada mdperangkat blok. Ini membantu sistem mengidentifikasi sistem file secara unik di antara sistem file yang tersedia pada sistem. Itu disimpan dalam struktur sistem file, yaitu dalam data yang disimpan pada perangkat md.

Yang kedua adalah UUID perangkat RAID. Ini membantu subsistem md mengidentifikasi perangkat RAID tertentu secara unik. Secara khusus, ini membantu mengidentifikasi semua perangkat blok milik array RAID. Itu disimpan dalam metadata dari array (pada setiap anggota). Anggota array juga memiliki UUID mereka sendiri (dalam sistem md, mereka juga dapat memiliki UUID partisi jika mereka adalah partisi GPT (yang dengan sendirinya akan disimpan dalam tabel partisi GPT), atau volume LVM ...).

blkidsedikit menyesatkan, karena yang dikembalikan adalah ID dari struktur yang disimpan pada perangkat (untuk jenis struktur yang diketahuinya seperti kebanyakan sistem file, anggota LVM dan perangkat swap). Juga perhatikan bahwa tidak jarang memiliki perangkat blok dengan struktur dengan UUID identik (misalnya snapshot LVM). Dan perangkat blok dapat berisi apa saja, termasuk hal-hal yang strukturnya tidak termasuk UUID.

Jadi, sebagai contoh, Anda dapat memiliki sistem dengan 3 drive, dengan partisi GPT. Drive-drive tersebut dapat memiliki World Wide Name yang mengidentifikasinya secara unik. Katakanlah 3 drive dipartisi dengan masing-masing satu partisi ( /dev/sd[abc]1). Setiap partisi akan memiliki UUID GPT yang disimpan dalam tabel partisi GPT.

Jika partisi tersebut membentuk array RAID5 md. Masing-masing akan mendapatkan UUID md sebagai anggota RAID, dan array akan mendapatkan UUID sebagai perangkat RAID md.

Itu /dev/md0bisa dipartisi lebih lanjut dengan MSDOS atau tipe partisi GPT. Sebagai contoh, kita dapat memiliki /dev/md0p1partisi dengan GPT UUID (disimpan dalam tabel partisi GPT yang disimpan dalam data / dev / md0).

Itu pada gilirannya bisa menjadi volume fisik untuk LVM. Karena itu akan mendapatkan UUID PV. Grup volume juga akan memiliki UUID VG.

Dalam grup volume itu, Anda akan membuat volume logis, masing-masing mendapatkan UUID LV.

Di salah satu LV itu (seperti /dev/VG/LV), Anda bisa membuat sistem file ext4. Sistem file itu akan mendapatkan UUID ext4.

blkid /dev/VG/LVakan memberi Anda (ext4) UUID dari sistem file itu. Tetapi sebagai partisi di dalam volume VG, itu juga akan mendapatkan UUID partisi (beberapa skema partisi seperti MSDOS / MBR tidak memiliki UUID). Grup volume itu terbuat dari PV anggota yang merupakan perangkat blok lain. blkid /dev/md0p1akan memberi Anda UUID PV. Ini juga memiliki UUID partisi di tabel GPT pada /dev/md0. /dev/md0sendiri dibuat dari perangkat blok lain. blkid /dev/sda1akan mengembalikan UUID anggota raid. Ini juga memiliki UUID partisi di tabel GPT pada /dev/sda.


Bagaimana kita mengubah UUID perangkat RAID seperti yang digunakan oleh mdadm? Kami baru saja mencitrakan ulang server dan UUID berbeda, jadi kami ingin mengembalikan UUID sebelumnya sehingga kami tidak perlu mengubah semua file konfigurasi. Pada dasarnya, /dev/md0memiliki UUID baru dan kami ingin mengembalikannya ke yang lama (diidentifikasi dari cadangan) sehingga sistem boot tanpa perlu perubahan lebih lanjut.
Chris

@ Chris, UUID MD (lihat man mdadm) atau UUID ext4 (lihat man tune2fs)? Apakah masalah boot tentang menemukan filesystem root atau tentang merakit array RAID berdasarkan mdadm.conf yang disimpan dalam initramfs. Either way, kedengarannya lebih mudah bagi saya untuk memperbarui mdadm.conf atau fstab / grub.cfg daripada bergaul dengan UUID.
Stéphane Chazelas

MD UUID - kami memulihkan server dari cadangan. Apakah Anda tahu cara memperbarui UUID perangkat RAID? Saya tidak dapat melihat informasi itu di halaman manual. Kami hanya mencoba mencari cara paling sederhana untuk membuatnya bekerja (menguji prosedur pengembalian).
Chris

@ Chris, Anda harus mengajukan pertanyaan lain untuk itu.
Stéphane Chazelas

@ Chris: Anda ingin UUID berbeda. Jika mdadm melihat beberapa disk yang diyakini milik serangan yang sama meskipun itu penggerebekan yang berbeda (karena konflik UUID), Anda akan memiliki masalah nyata.
frostschutz

4

UUID yang berbeda sudah dijelaskan. Tidak hanya filesystem yang memilikinya. Hanya ada UUID untuk hal-hal yang berbeda: raid array, perangkat, partisi, wadah LUKS, LVM PV's ... dan akhirnya filesystems.

Yang mengganggu saya secara pribadi adalah bahwa cara penyusunan UUID itu pun berbeda.

blkid:

# blkid /dev/sda1
/dev/sda1: 
UUID="d8b8b4e5-e47b-2e45-2093-cd36f654020d"
UUID_SUB="3c3e6eac-2139-3f7a-16b7-57280934d88e"
PARTUUID="6a89cedf-69e1-40db-b08c-1c8e45af59f5" 

mdadm:

# mdadm --examine /dev/sda1 | grep UUID
     Array UUID : d8b8b4e5:e47b2e45:2093cd36:f654020d
    Device UUID : 3c3e6eac:21393f7a:16b75728:0934d88e

Seperti yang Anda lihat, mereka adalah UUID yang sama, tetapi blkidmencetaknya dengan tanda hubung -sedangkan mdadmmenggunakan titik dua :. Jadi Anda mendapatkan d8b8b4e5-e47b-2e45-2093-cd36f654020dvs d8b8b4e5:e47b2e45:2093cd36:f654020d.

Sangat menjengkelkan, terutama jika Anda ingin bekerja dengan UUID dalam skrip. Tidak jelas cara mengonversi dari satu format ke format lainnya.


Bagaimana dengan s /: / - / g atau sebaliknya? ;)
ThiefMaster

benar-benar tanda titik dua :atau kolon -ada agar manusia dapat membaca UUID panjang dalam potongan dan tidak tersesat di suatu tempat di tengah. UUID benar-benar angka biner, dan tidak memiliki tanda hubung atau titik dua. Hal ini diimplementasikan dalam Linux sebagai array karakter unsigned: unsigned char uuid_out[16]. Rupanya spec UUID juga memiliki ide varian dan versi , yang dapat kita lihat diimplementasikan dengan menetapkan byte paling signifikan uuid_out[6]ke 4 .
TrinitronX

-1

UUID blkid di atas "32cb0a6e-8148-44e9-909d-5b23df045bd1" adalah yang benar, itulah yang akan digunakan OS untuk menemukan array RAID.

mdadm memiliki UUID "internal" sendiri yang tidak digunakan langsung oleh OS dan adalah apa yang Anda gunakan dalam file mdadm.conf misalnya:

"Tingkat ARRAY / dev / md1 = raid1 num-devices = 2 uuid = f204c558: babf732d: 85bd7296: bbfebeea"

mdadm seharusnya tidak memanggil apa pun UUID bila terpisah dari yang diakui dan OS blkid. Mungkin itu harus disebut mduuid atau sesuatu yang lain untuk menghindari kebingungan.

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.