Volume LVM tidak aktif setelah reboot dari CentOS

9

Saya telah menginstal ulang server Linux dari CentOS 6 hingga 7. Server memiliki 3 drive - drive sistem SSD (kecuali semua host /home) dan dua drive HDD 4TB yang menjadi tuan rumah /home. Semuanya menggunakan LVM. Dua drive 4TB dicerminkan (menggunakan opsi raid di dalam LVM itu sendiri), dan mereka sepenuhnya diisi dengan partisi / home.

Masalahnya adalah bahwa meskipun disk 4TB dikenali dengan baik, dan LVM melihat volume tanpa masalah, itu tidak mengaktifkannya secara otomatis. Yang lainnya diaktifkan secara otomatis. Saya dapat mengaktifkannya secara manual, dan berfungsi.

Saya memiliki gambar drive sistem lama di / rumah. Itu juga mengandung volume LVM. Jika saya memasangnya kpartx, dan LVM mengambilnya dan mengaktifkannya. Tapi saya tidak bisa melihat perbedaan antara volume itu dan yang tidak aktif.

Filesystem root juga LVM, dan itu mengaktifkannya dengan baik.

Saya melihat hal yang aneh: mengeksekusi lvchange -aaymemberitahu saya bahwa saya perlu menentukan drive mana yang ingin saya aktifkan. Itu tidak melakukannya secara otomatis juga. Jika saya menentukan lvchange -ay lv_home- itu berfungsi.

Saya tidak dapat menemukan apa pun yang dapat bertanggung jawab atas perilaku ini.

Ditambahkan: Saya perhatikan bahwa sistem lama (yang menggunakan init) ada vgchange -aay --sysinitdi skrip startupnya. Yang baru menggunakan systemd, dan saya tidak melihat vgchangepanggilan dalam skripnya. Tapi saya juga tidak tahu harus meletakkannya di mana.

Ditambahkan 2: Mulai mencari tahu systemd. Saya menemukan di mana skrip berada dan mulai memahami bagaimana mereka dipanggil. Juga menemukan bahwa saya dapat melihat skrip yang dieksekusi dengan systemctl -al. Ini menunjukkan kepada saya bahwa setelah memulai lvmetadpanggilan pvscanuntuk setiap perangkat blok udev dikenal. Namun pada saat itu hanya ada satu perangkat blok udev terdaftar, dan itu adalah salah satu volume lvm yang dikenali. Hard drive ada di sana juga, tetapi di bawah jalur yang berbeda dan nama yang lebih panjang. Perangkat blok yang dikenali adalah sesuatu yang mirip 8:3, sedangkan hard drive seperti /device/something/. Saya tidak di server lagi, jadi saya tidak bisa menulisnya dengan tepat (akan memperbaikinya nanti).

Saya pikir itu ada hubungannya dengan udev dan deteksi / pemetaan perangkat. Saya akan melanjutkan di malam hari dan akan belajar udev kemudian.

Jika semuanya gagal, saya menemukan skrip yang memanggil pvscandan memeriksa bahwa saya dapat memodifikasinya untuk memindai semua perangkat sepanjang waktu. Itu memperbaiki masalah, tetapi sepertinya peretasan agak jelek, jadi saya akan mencoba mencari tahu penyebab sebenarnya.

Ditambahkan 3 : OK, saya masih tidak tahu mengapa ini terjadi, tapi setidaknya saya sudah membuat solusi yang lumayan. Saya membuat layanan systemd lain yang memanggil pvscansekali, tepat setelah memulai lvmetad. Panggilan lain untuk perangkat tertentu masih ada, dan saya pikir itu sebenarnya udevyang memanggilnya (itulah satu-satunya tempat saya menemukan referensi untuk itu). Mengapa tidak menyebutnya untuk hard drive lain - Saya tidak tahu.

Vilx-
sumber
Apakah layanan sistem LVM berjalan? Ini terjadi pada saya.
Naftuli Kay
@NaftuliTzviKay - Ya, layanan mulai baik-baik saja (setidaknya lvmetad- saya belum melihat yang lain).
Vilx-
Ada layanan lain yang namanya menghindari saya saat ini.
Naftuli Kay
@NaftuliTzviKay - Hmm ... ada juga semacam "pemantauan" layanan juga. Itu mulai baik juga, meskipun saya ingat pernah membaca tentang apa yang dilakukannya dan sampai pada kesimpulan bahwa itu tidak berlaku bagi saya. Saya tidak memiliki akses ke kotak saat ini, jadi saya akan periksa lagi nanti.
Vilx-

Jawaban:

7

Saya melakukannya! Saya melakukannya! Saya memperbaikinya dengan benar (saya pikir).

Begini ceritanya:

Setelah beberapa waktu server ternyata rusak dan harus dihapus. Saya menyimpan disk dan membuat yang lainnya baru. Kemudian saya menginstal ulang CentOS lagi di SSD dan kemudian saya pasang HDD. LVM bekerja dengan baik, disk dikenali, konfigurasi disimpan. Tetapi masalah yang sama muncul lagi - setelah reboot, volumenya tidak aktif.

Namun kali ini saya kebetulan melihat sesuatu yang lain - bootloader meneruskan parameter berikut ke kernel:

crashkernel = auto rd.lvm.lv = centos / root rd.lvm.lv = centos / swap rhgb quiet

Hmm, tunggu sebentar, mereka terlihat TERKENAL !

Permintaan google cepat, dan ini dia :

rd.lvm.lv =

hanya aktifkan volume logis dengan nama yang diberikan. rd.lvm.lv dapat ditentukan beberapa kali pada baris perintah kernel.

Baik sekarang. ITULAH menjelaskannya!

Jadi, resolusinya adalah (dikumpulkan dari beberapa pertanyaan google lainnya):

  1. Ubah /etc/defaults/grubuntuk memasukkan volume tambahan dalam parameter:crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swaprd.lvm.lv=vg_home/lv_homerhgb quiet
  2. Konfigurasikan ulang grub dengan grub2-mkconfig -o /boot/grub2/grub.cfg
  3. Konfigurasikan ulang initramfs dengan mkinitrd -f -v /boot/initramfs-3.10.0-327.18.2.el7.x86_64.img 3.10.0-327.18.2.el7.x86_64. Catatan: nilai Anda mungkin beragam. Gunakan uname -runtuk mendapatkan versi kernel itu. Atau baca terus mkinitrd. (Terus terang, saya tidak tahu mengapa langkah ini diperlukan, tetapi ternyata itu - saya mencoba tanpa itu dan tidak berhasil)
  4. Dan akhirnya, instal ulang grub: grub2-install /dev/sda
  5. Reboot, secara alami.

TA-DA! Volume aktif saat reboot. Tambahkan ke fstabdan nikmatilah! :)

Vilx-
sumber
2

Pembaruan kecil (untuk RHEL 7 pada mesin EFI (non-BIOS) ):

Saya harus berhasil menggunakan langkah-langkah ini:

  1. Ubah /etc/defaults/grubuntuk memasukkan volume tambahan dalam parameter: rd.lvm.lv=rhel/home(selain rhel/rootdan rhel/swap)
  2. Konfigurasikan ulang grub dengan

    grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    

    ( catatan: jalan lain!)

  3. Konfigurasikan ulang initramfs dengan

    mkinitrd -f -v /boot/initramfs-$(uname -r).img $(uname -r)
    
  4. Lewati instal ulang grub: grub2-install /dev/sda(karena saya memiliki direktori kosong /usr/lib/grub/)
  5. Reboot, secara alami.
jno
sumber
Hmm, sepertinya Anda menggunakan EFI. Dalam kasus saya itu adalah kotak BIOS, jadi itu mungkin perbedaannya.
Vilx-
Ya, itu adalah bilah x240. Saya telah menambahkan catatan di EFI.
jno
@ Vilx- Ada solusi yang diusulkan vendor untuk bug ini. Tapi itu sangat jelek. Mereka mengusulkan untuk menambahkan _netdevbendera untuk fstab, mengaktifkan chkconfig netfs ondan bahkan mematikan use_lvmetad = 0yang lvmetaddi /etc/lvm/lvm.confhanya dengan harapan perangkat akan kembali disurvei dan diambil ...
jno
Maaf, tidak dapat melihatnya, karena saya bukan pelanggan RedHat. Tetapi saya tidak melihat mengapa solusi kami tidak benar dan solusi yang berbeda diperlukan. Maksud saya, ini bukan bug - semuanya berfungsi sebagaimana mestinya.
Vilx-
Saya pikir, ini adalah bug: root dan swap terdaftar secara eksplisit di cmdline kernel sedangkan home tidak. Oleh karena itu, kami memiliki dua volum LVM yang terpasang dan satu tergantung di "tidak aktif". Saya telah mengutip proposal mereka di sini tepatnya untuk menghindari kebutuhan dalam kredensial akses khusus :)
jno
1

Saya punya masalah ini juga. Dalam kasus saya itu adalah kombinasi dari iscsi, multipath dan lvm dan urutan pembuatan sesi dll. Saya memecahkan masalah dengan menambahkan panggilan /sbin/vgchange -a yke /etc/rc.local.

Tom Schuneman
sumber
0

Jadi saya mencoba pengaturan rd.lvm.lv = di / etc / default / grub dan itu tidak berhasil

Saya membutuhkan kedua volume logis pada grup volume ssd_vg agar aktif saat boot. Serta volume logis home_lv pada kubuntu-vg menjadi aktif

Apa yang berhasil adalah mengedit /etc/lvm/lvm.conf Di bagian daftar volume taruh ini di volume_list = ["ssd_vg", "kubuntu-vg / home_lv"]

hasil setelah reboot

$ sudo lvscan tidak aktif Asli '/ dev / kubuntu-vg / root' [50.00 GiB] mewarisi

inactive          '/dev/kubuntu-vg/swap_1' [7.88 GiB] inherit

ACTIVE            '/dev/kubuntu-vg/home_lv' [1000.00 GiB] inherit

inactive Snapshot '/dev/kubuntu-vg/root_snap11' [50.00 GiB] inherit

inactive Snapshot '/dev/kubuntu-vg/root_snap12' [50.00 GiB] inherit

ACTIVE            '/dev/ssd_vg/root' [224.02 GiB] inherit

ACTIVE            '/dev/ssd_vg/swap_1' [7.88 GiB] inherit
ttguy
sumber
0

Untuk bagian saya, saya punya komentar pada baris ini di /etc/lvm/lvm.conf

auto_activation_volume_list = [ "vg00", "vg01" ]

Karena jika aktif, hanya volume vg00 dan vg01 yang aktif saat boot.

Dokumentasi lvm.conf:

If auto_activation_volume_list is defined, each LV that is to be
activated with the autoactivation option (--activate ay/-a ay) is
first checked against the list. There are two scenarios in which
the autoactivation option is used:

  - automatic activation of volumes based on incoming PVs. If all the
    PVs making up a VG are present in the system, the autoactivation
    is triggered. This requires lvmetad (global/use_lvmetad=1) and udev
    to be running. In this case, "pvscan --cache -aay" is called
    automatically without any user intervention while processing
    udev events. Please, make sure you define auto_activation_volume_list
    properly so only the volumes you want and expect are autoactivated.

  - direct activation on command line with the autoactivation option.
    In this case, the user calls "vgchange --activate ay/-a ay" or
    "lvchange --activate ay/-a ay" directly.

By default, the auto_activation_volume_list is not defined and all
volumes will be activated either automatically or by using --activate ay/-a ay.

N.B. The "activation/volume_list" is still honoured in all cases so even
if the VG/LV passes the auto_activation_volume_list, it still needs to
pass the volume_list for it to be activated in the end.

If auto_activation_volume_list is defined but empty, no volumes will be
activated automatically and --activate ay/-a ay will do nothing.

auto_activation_volume_list = []

If auto_activation_volume_list is defined and it's not empty, only matching
volumes will be activated either automatically or by using --activate ay/-a ay.

  "vgname" and "vgname/lvname" are matched exactly.
  "@tag" matches any tag set in the LV or VG.
  "@*" matches if any tag defined on the host is also set in the LV or VG


Only activate vg00 and vg01 automatically.
auto_activation_volume_list = [ "vg00", "vg01" ]
inadget
sumber