Posting ini ditujukan untuk Administrator Sistem Linux yang ingin mengonfigurasi atau mengoptimalkan lebih lanjut sistem terkonfigurasi LVM yang ada. Ini membahas:
- kebutuhan akan konfigurasi string filter LVM khusus untuk jenis penyimpanan tertentu yang digunakan.
- menyediakan contoh string filter LVM untuk berbagai perangkat penyimpanan umum
Konfigurasi LVM – parameter filter
File konfigurasi LVM utama adalah /etc/lvm/lvm.conf . File terdiri dari sejumlah bagian yang masing-masing berisi berbagai parameter/nilai. Artikel ini secara khusus berfokus pada parameter filter dalam bagian perangkat.
Berikut ini adalah contoh file lvm.conf:
devices { dir = "/dev" scan = [ "/dev" ] obtain_device_list_from_udev = 1 preferred_names = [ ] filter = [ "a/.*/" ] cache_dir = "/etc/lvm/cache" cache_file_prefix = "" write_cache_state = 1 sysfs_scan = 1 multipath_component_detection = 1 md_component_detection = 1 md_chunk_alignment = 1 default_data_alignment = 0 data_alignment_detection = 1 data_alignment = 0 data_alignment_offset_detection = 1 ignore_suspended_devices = 0 disable_after_error_count = 0 require_restorefile_with_uuid = 1 pv_min_size = 2048 issue_discards = 0 } log { verbose = 0 syslog = 1 overwrite = 0 level = 0 indent = 1 command_names = 0 prefix = " " } backup { backup = 1 backup_dir = "/etc/lvm/backup" archive = 1 archive_dir = "/etc/lvm/archive" retain_min = 10 retain_days = 30 } shell { history_size = 100 } global { umask = 077 test = 0 units = "h" si_unit_consistency = 0 activation = 1 proc = "/proc" locking_type = 1 wait_for_locks = 1 fallback_to_clustered_locking = 1 fallback_to_local_locking = 1 locking_dir = "/var/lock/lvm" prioritise_write_locks = 1 abort_on_internal_errors = 0 detect_internal_vg_cache_corruption = 0 metadata_read_only = 0 } activation { checks = 0 udev_sync = 1 udev_rules = 1 verify_udev_operations = 0 missing_stripe_filler = "error" reserved_stack = 256 reserved_memory = 8192 process_priority = -18 mirror_region_size = 512 readahead = "auto" mirror_log_fault_policy = "allocate" mirror_image_fault_policy = "remove" snapshot_autoextend_threshold = 100 snapshot_autoextend_percent = 20 use_mlockall = 0 monitoring = 1 polling_interval = 15 } dmeventd { mirror_library = "libdevmapper-event-lvm2mirror.so" snapshot_library = "libdevmapper-event-lvm2snapshot.so" }
Secara default, saat sistem boot, LVM memindai perangkat yang ditentukan oleh parameter filter untuk menemukan perangkat LVM. Menggunakan string filter default di atas (filter =[ “a/.*/” ] ), LVM memindai semua perangkat yang tersedia di sistem. Saat PV ditemukan, VG dirakit, LV diaktifkan, kemudian sistem file (jika ada) selanjutnya dipasang.
Untuk sistem dengan sejumlah besar perangkat penyimpanan (LUN) terpasang, mungkin tidak diinginkan atau diperlukan LVM untuk memindai setiap perangkat yang tersedia. Dalam hal ini, string filter LVM dapat dimodifikasi (dioptimalkan) untuk memindai sekumpulan perangkat yang ditentukan pengguna.
LVM dan Multipathing
Selain penyimpanan lokal, pengguna biasanya membuat perangkat LVM di penyimpanan SAN. Selain itu, akses ke penyimpanan SAN sering kali multipath, yaitu beberapa jalur ke SAN LUN yang sama ada di sistem. Dalam kasus device-mapper-multipath, solusi multipath Oracle Linux asli, perangkat berikut mungkin ada yang semuanya merujuk pada SAN LUN yang sama:
/dev/mapper/mpath1 /dev/dm-1 /dev/sda /dev/sdb
Implementasi multipath berbeda – dalam kasus EMC PowerPath, perangkat berikut mungkin ada yang semuanya merujuk pada SAN LUN yang sama:
/dev/emcpowera /dev/sda /dev/sdb
Seperti yang dinyatakan sebelumnya, nilai string filter lvm.conf default menginstruksikan LVM untuk memindai semua perangkat yang terpasang/tersedia. Sayangnya, ini mungkin bermasalah saat menggunakan LVM bersama dengan multipathing. Bergantung pada urutan penemuan perangkat (jalur), LVM pada akhirnya dapat menggunakan perangkat jalur tunggal mis. /dev/sd[a,b] untuk membuat VG alih-alih menggunakan perangkat multipath yang dimaksud mis. /dev/mapper/mpath1. Jika ini terjadi, perangkat LVM tidak diberikan manfaat multipathing yaitu redundansi path loss, ketersediaan tinggi, dll. Masalah yang sama ini juga berlaku untuk sistem yang dikonfigurasi dengan boot dari SAN.
Pesan seperti berikut biasanya diamati ketika sistem LVM yang menggunakan multipath tidak dikonfigurasi secara optimal untuk mengecualikan perangkat singlepath:
# pvs Found duplicate PV Yvq85ssLqAXeBvZpVtAqBIbm44KU8cd5: using /dev/dm-1 not /dev/sda Found duplicate PV Yvq85ssLqAXeBvZpVtAqBIbm44KU8cd5: using /dev/mapper/mpath1 not /dev/dm-1 Found duplicate PV Yvq85ssLqAXeBvZpVtAqBIbm44KU8cd5: using /dev/sdb not /dev/mapper/mpath1 PV VG Fmt Attr PSize PFree /dev/sdb VolGroup01 lvm2 a-- 1.00G 1.00G /dev/cciss/c0d0p2 VolGroup00 lvm2 a-- 48.81G 0
Di atas, LVM secara keliru menggunakan perangkat jalur tunggal /dev/sdb alih-alih perangkat jalur ganda /dev/mapper/mpath1. Untuk memastikan bahwa LVM menggunakan perangkat/jalur penyimpanan yang diinginkan, sesuaikan string filter LVM untuk secara khusus menyertakan dan/atau mengecualikan perangkat yang diinginkan dan/atau tidak diinginkan. Karena jangkauan dan variasi penyimpanan lokal dan SAN yang tersedia, tidak ada satu pun konfigurasi file LVM yang sesuai dengan setiap kemungkinan penerapan. Oleh karena itu, string filter LVM harus disesuaikan untuk kombinasi sistem/penyimpanan individual.
Contoh string filter LVM
Bagian ini menawarkan rentang nilai string filter LVM sampel yang tidak lengkap. Perhatikan bahwa LVM menerima berbagai kombinasi sintaks ekspresi reguler untuk nilai string filter. Contoh-contoh berikut menunjukkan satu variasi tersebut, namun, variasi/kombinasi lain diterima. Namun, LVM akan dengan mudah mengeluh jika ada kesalahan sintaks utama.
Terima(a) Filter
Filter | Artinya |
---|---|
filter =[ “a/.*/” ] | Semua perangkat |
filter =[ “a|^/dev/sd*|” ] | Hanya semua perangkat SCSI |
filter =[ “a|^/dev/sda|” ] | Perangkat SCSI /dev/sda |
filter =[ “a|^/dev/sda[1-9]$|” ] | Semua partisi pada perangkat SCSI /dev/sda saja |
filter =[ “a|^/dev/cciss/*|” ] | Hanya perangkat yang dikontrol HP SmartArray (cciss) |
filter =[ “a|^/dev/loop*|” ] | Semua perangkat loop – /dev/loop* |
filter =[ “a|^/dev/loop1[0-2]$|” ] | Hanya perangkat loop 10, 11, 12 – /dev/loop1[0-2] |
filter =[ “a|^/dev/hda1$|” ] | Partisi 1 pada perangkat IDE /dev/hda |
filter =[ “a|^/dev/mapper/*|” ] | perangkat multipath pemetaan perangkat |
filter =[ “a|^/dev/emcpower*|” ] | Semua perangkat EMC PowerPath |
filter =[ “a|^/dev/vpath[a-z]*|” ] | Semua perangkat IBM Subsystem Device Driver (SDD) |
filter =[ “a|^/dev/sddlm*|” ] | Semua perangkat Hitachi Dynamic Link Manager (HDLM) |
Tolak(r) Filter
Filter | Artinya |
---|---|
filter =[ “r|^/dev/*|” ] | Semua perangkat |
filter =[ “r|^/dev/cdrom|” ] | Perangkat CD/DVD /dev/cdrom |
filter =[ “r|^/dev/hdc|” ] | Hanya perangkat IDE /dev/hdc |
String filter LVM dapat ditentukan secara individual atau beberapa nilai yang digunakan bersama sesuai kebutuhan. Untuk menghindari ambiguitas atau pemindaian/penggunaan perangkat yang tidak diinginkan, setiap perangkat yang dimaksud (a) harus ditentukan kemudian segera diikuti oleh string pengecualian eksplisit (r) untuk mencegah perangkat lain dipindai/digunakan.
Contoh kerja string filter LVM
Sistem dengan perangkat LVM pada penyimpanan SCSI lokal dan penyimpanan SAN device-mapper-multipath mungkin menentukan:
filter = [ "a|^/dev/sda[1-9]$|", "a|^/dev/mapper/*|", "r|^/dev/*|" ]
Sistem HP dengan perangkat LVM pada penyimpanan Smart Array lokal dan penyimpanan EMC PowerPath SAN jarak jauh dapat menentukan:
filter = [ "a|^/dev/cciss/*|", "a|^/dev/emcpower*|", "r|^/dev/*|" ]
Sistem dengan perangkat LVM pada penyimpanan SCSI lokal dan penyimpanan IBM Subsystem Device Driver SAN mungkin menentukan:
filter = [ "a|^/dev/sda[1-9]$|", "a|^/dev/vpath[a-z]*|", "r|^/dev/*|" ]
Validasi string filter LVM kandidat
Saat merancang dan menguji string filter LVM, pastikan bahwa LVM menemukan/menggunakan semua (dan hanya) perangkat yang dimaksudkan dan perangkat lain yang tidak diinginkan tidak dipindai/digunakan. Proses validasi harus mencakup hal-hal seperti:
- cadangkan file /etc/lvm/lvm.conf asli
- secara opsional gunakan lvmpdump untuk mencadangkan seluruh konfigurasi LVM
- sesuaikan string filter LVM seperti yang diperlukan yaitu /etc/lvm/lvm.conf:filter =[…]
- hapus file cache LVM mis. # /bin/rm /etc/lvm/cache/.cache
- memindai ulang perangkat LVM mis. # /sbin/pvscan -vv
Perangkat yang terdaftar di bagian 'Berjalan melalui semua volume fisik' dari output pvscan menunjukkan perangkat mana yang dipindai oleh LVM. Bagian akhir dari keluaran pvscan mencantumkan semua/semua perangkat PV yang ditemukan. Perhatikan bahwa string filter LVM yang salah atau dikonfigurasi secara tidak optimal dapat mengakibatkan:
- penggunaan perangkat yang tidak diinginkan, mis. jalur tunggal bukan multi jalur
- pemindaian perangkat LVM yang tidak perlu, mengakibatkan boot sistem yang lama
- kegagalan menemukan perangkat LVM yang dimaksud, mengakibatkan perangkat/sistem file tidak tersedia
- gagal mem-boot sistem, misalnya kernel panic dll.
Output konsol sistem berikut menunjukkan pesan waktu boot umum ketika sistem tidak dapat menemukan perangkat LVM yang berisi sistem file root:
root (hd0,0) Filesystem type is ext2fs, partition type 0x83 kernel /vmlinuz-2.6.18-348.el5 ro root=/dev/VolGroup00/root 3 crashkernel=128@16M elevator=deadline [Linux-bzImage, setup=0x1e00, size=0x1fd6fc] initrd /initrd-2.6.18-348.el5.img [Linux-initrd @ 0x37a7c000, 0x57396d bytes] Warning: pci_mmcfg_init marking 256MB space uncacheable. Red Hat nash version 5.1.19.6 starting. lpfc 0000:06:00.0 0:1303 Link Up Event x1 received Data : x1 xf7 x10 x9 x0 x0 0 lpfc 0000:06:00.1 1:1303 Link Up Event x1 received Data : x1 xf7 x10 x9 x0 x0 0 Unable to access resume device (/dev/VolGroup00/swap) mount: could not find filesystem '/dev/root' setuproot: moving /dev failed: No such file or directory setuproot: error mounting /proc: No such file or directory setuproot: error mounting /sys: No such file or directory switchroot: mount failed: No such file or directory Kernel panic - not syncing: Attempted to kill init!
Menerapkan perubahan konfigurasi LVM
Salinan file lvm.conf disimpan di dalam file ram disk (initrd) sistem awal yang digunakan selama boot sistem. Oleh karena itu, perubahan konfigurasi LVM menjamin pembangunan kembali initrd agar perubahan efektif pada saat boot. Setelah filter LVM yang sesuai telah ditentukan/divalidasi, lakukan tindakan berikut:
1. Hapus file cache LVM mis.
# rm /etc/lvm/cache/.cache
2. Bangun kembali ramdisk awal (initrd) sebagai berikut
Perhatikan bahwa membangun kembali file initrd dengan filter LVM yang tidak dikonfigurasi dengan benar dapat mengakibatkan kegagalan boot sistem yang lengkap. Oleh karena itu, pendekatan alternatif berikut disediakan untuk membantu mencegah kegagalan tersebut.
Opsi 1 (disarankan)
Opsi ini melibatkan penentuan entri boot kernel GRUB baru untuk menguji perubahan LVM tanpa menimpa initrd saat ini.
# cd /boot # mkinitrd -v -f /boot/initrd-`uname -r`.LVM.img `uname -r` Creating initramfs ...
# ls -lart ... -rw------- 1 root root 3805700 Nov 1 16:40 initrd-2.6.18-348.el5.LVM.img
Selanjutnya, tinjau file konfigurasi GRUB /boot/grub/grub.conf. Entri boot kernel GRUB, dimulai dengan judul, terdaftar satu demi satu. Nilai parameter default menentukan kernel boot default saat ini. Penomoran entri boot GRUB dimulai dari nol (0), oleh karena itu:
– default=0 mengacu pada entri boot kernel GRUB pertama yang terdaftar.
– default=3 mengacu pada entri boot kernel GRUB keempat yang terdaftar.
Salin semua baris entri boot kernel default di bawahnya. Ubah baris initrd dari entri boot kernel baru untuk mencerminkan nama file initrd yang baru dibuat. Ubah nilai parameter default untuk mencerminkan entri boot kernel GRUB yang baru dibuat. Jika nilai parameter default asli adalah 0 dan entri GRUB baru dibuat tepat di bawahnya, ubah nilai parameter default menjadi 1, misalnya:
# cat /etc/grub/grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00 # initrd /initrd-version.img #boot=/dev/sda #default=0 default=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Oracle Linux Server (2.6.18-348.el5) root (hd0,0) kernel /vmlinuz-2.6.18-348.el5 ro root=/dev/VolGroup00/LogVol00 crashkernel=128M@32 numa=off initrd /initrd-2.6.18-348.el5.img title Oracle Linux Server (2.6.18-348.el5) LVM root (hd0,0) kernel /vmlinuz-2.6.18-348.el5 ro root=/dev/VolGroup00/LogVol00 crashkernel=128M@32 numa=off initrd /initrd-2.6.18-348.el5.LVM.img ...
Setelah reboot, sistem akan boot menggunakan entri boot GRUB yang baru dibuat termasuk initrd yang baru dibuat. Jika ada masalah, reboot sistem, hentikan proses boot untuk mengakses menu GRUB dan pilih untuk mem-boot sistem menggunakan entri boot asli.
Opsi 2 (ahli)
Opsi ini melibatkan penimpaan entri boot kernel GRUB default yang ada dan penimpaan initrd saat ini.
# cd /boot # mv initrd-`uname -r`.img initrd-`uname -r`.img.orig # mkinitrd -v -f /boot/initrd-`uname -r`.img `uname -r` Creating initramfs ...
Setelah reboot, sistem akan boot menggunakan boot GRUB yang ada tetapi menggunakan initrd yang baru dibangun.
3. Setelah reboot, verifikasi bahwa semua perangkat LVM (PV, VG, LV) ada dan menggunakan perangkat fisik dan/atau multipath yang dimaksud. Ulangi tindakan di atas untuk pengoptimalan konfigurasi filter LVM lebih lanjut atau kapan pun perubahan LVM/penyimpanan/reorganisasi lebih lanjut memerlukan konfigurasi ulang.