Mengecilkan volume fisik LVM di atas array RAID terdegradasi mdadm, menambahkan cadangan dan membangunnya kembali

8

Saya memiliki Debian Wheezysistem dengan beberapa 500 GB HDD di RAID-1 ( mdadmmirror), di atas yang duduk LVMvolume logis dengan 5 partisi ( boot, root, usr, vardan tmp), ukuran total 47,15 GiB. 418,38 GiB dalam volume fisik tidak dipungut biaya. GRUBdiinstal pada kedua drive.

Salah satu HDD gagal dan sekarang array rusak, tetapi data masih utuh.

Yang saya inginkan adalah menukar semua 2 HDD ini menjadi 80 GB SSD tanpa perlu menginstal ulang sistem dari awal. Titik halus di sini adalah bahwa saya perlu mengecilkan volume fisik LVM agar sesuai dengan ukuran SSD, tetapi volume logis tidak bersebelahan (ada banyak ruang kosong di awal), jadi saya harus entah bagaimana memindahkan volume logis dalam fisik. . Dan tidak ada lvmoveperintah di Debian.

Bagaimana saya mencapai ini?

Beberapa keluaran konsol:

Versi:

root@wheezy:~# uname -a && mdadm --version && lvm version
Linux wheezy 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux
mdadm - v3.2.5 - 18th May 2012
  LVM version:     2.02.95(2) (2012-03-06)
  Library version: 1.02.74 (2012-03-06)
  Driver version:  4.22.0

Detail susunan:

root@wheezy:~# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu Dec  4 12:20:22 2014
     Raid Level : raid1
     Array Size : 488148544 (465.53 GiB 499.86 GB)
  Used Dev Size : 488148544 (465.53 GiB 499.86 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Thu Dec  4 13:08:59 2014
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : wheezy:0  (local to host wheezy)
           UUID : 44ea4079:b3b837d3:b9bb2ca1:1b95272a
         Events : 26

Number   Major   Minor   RaidDevice State
   0       8       16        0      active sync   /dev/sdb
   1       0        0        1      removed

Detail singkat LVM:

root@wheezy:~# pvs && vgs && lvs                                                                                               
  PV         VG     Fmt  Attr PSize   PFree                                                                                          
  /dev/md0   system lvm2 a--  465.53g 418.38g                                                                                        
  VG     #PV #LV #SN Attr   VSize   VFree                                                                                            
  system   1   5   0 wz--n- 465.53g 418.38g                                                                                          
  LV   VG     Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert                                                            
  boot system -wi----- 152.00m                                                                                                       
  root system -wi-----   2.00g                                                                                                       
  tmp  system -wi-----  10.00g                                                                                                       
  usr  system -wi-----  20.00g                                                                                                       
  var  system -wi-----  15.00g

Segmentasi PV:

root@wheezy:~# pvs -v --segments /dev/md0
    Using physical volume(s) on command line
    PV         VG     Fmt  Attr PSize   PFree   Start  SSize LV   Start Type   PE Ranges             
    /dev/md0   system lvm2 a--  465.53g 418.38g      0 89600          0 free                         
    /dev/md0   system lvm2 a--  465.53g 418.38g  89600    38 boot     0 linear /dev/md0:89600-89637  
    /dev/md0   system lvm2 a--  465.53g 418.38g  89638   512 root     0 linear /dev/md0:89638-90149  
    /dev/md0   system lvm2 a--  465.53g 418.38g  90150  5120 usr      0 linear /dev/md0:90150-95269  
    /dev/md0   system lvm2 a--  465.53g 418.38g  95270  3840 var      0 linear /dev/md0:95270-99109  
    /dev/md0   system lvm2 a--  465.53g 418.38g  99110  1280          0 free                         
    /dev/md0   system lvm2 a--  465.53g 418.38g 100390  2560 tmp      0 linear /dev/md0:100390-102949
    /dev/md0   system lvm2 a--  465.53g 418.38g 102950 16226          0 free  
Neurotransmitter
sumber
Atau Anda bisa membuat RAID / VG / LV baru pada SSD dan rsyncfile Anda. Ini tidak online tetapi cenderung lebih cepat dari yang lainnya.
frostschutz
Pada awalnya saya harus mengecilkan PV dan array. Lalu saya baru saja memulihkan array.
Neurotransmitter

Jawaban:

5

Anda tidak perlu mengecilkan pv atau membangun kembali array. Anda hanya perlu membuat array baru dari drive baru dan menambahkannya sebagai pv baru ( pvcreate+ vgextend), lalu pvmovesemua lv yang ada dari pv lama, kemudian hapus pv lama ( vgreduce) dan lepaskan drive itu dari layanan.

psusi
sumber
Solusi alternatif yang baik tetapi saya lebih suka tetap menggunakan array lama hanya untuk menghemat waktu: Saya tidak ingin mengintegrasikan kembali array baru dalam sistem lama.
Neurotransmitter
1
@ TranslucentCloud, dibutuhkan lebih sedikit waktu untuk membuat array baru daripada mengubah ukuran yang lama, membangunnya kembali di salah satu drive baru, menghapus drive lama, dan membangunnya lagi.
psusi
Tetapi Anda dapat menghadapi langkah-langkah tambahan yang mencoba menginstal GRUBdari sistem Live. Lebih mudah untuk boot ke sistem produksi dan menginstal GRUB darinya dengan satu perintah sederhana.
Neurotransmitter
@TranslucentCloud, siapa yang mengatakan sesuatu tentang sistem live? Apa pun cara Anda harus menginstal grub pada drive baru. Karena Anda menjalankan debian itu sangat mudah: dpkg-reconfigure grub-pcdan pilih drive baru.
psusi
1
@TranslucentCloud seluruh titik LVM adalah kemampuan untuk mengubah ukuran dan memindahkan sesuatu saat sistem sedang digunakan. Sama dengan MD, Anda dapat mengganti disk dan mengubah ukuran saat sedang berjalan. Satu-satunya hal yang dapat mencegah Anda adalah jika filesystem Anda tidak mendukung ukuran langsung (jika Anda harus mengecilkannya).
frostschutz
3

Bukan lvmovetapi pvmove.

pvmove --alloc=anywhere /dev/md0:89600-102950 /dev/md0:0-12070

Itu harus memindahkan setiap luasan dalam rentang 89600-102950 ke rentang 0-12070. Menurut data yang Anda poskan, seharusnya LV Anda dipindahkan ke bagian awal PV Anda.

frostschutz
sumber
Ya, ini menyelesaikan LVmenyelaraskan bagian dari tugas.
Neurotransmitter
3

PERHATIAN: PANDUAN INI JAUH DARI OPTIMAL. PERIKSA JAWABAN YANG DITERIMA

Oke, saya sudah tahu bagaimana melakukan apa yang saya coba. Ini akan menjadi semacam tutorial.

Selama waktu ini saya belum menyadari, bahwa manipulasi dengan LVs sebenarnya mungkin ketika filesystem dipasang dan di-boot ke beberapa livedistro Linux (SystemRescueCD). Orang-orang di sini menjelaskan kepada saya, bahwa tidak ada keharusan dalam hal ini jika Anda tidak memanipulasi dengan sistem file aktual dan hanya menyelaraskan LV dan menyusut PV.

Jadi dengan panduan ini Anda pasti akan mencapai apa yang Anda inginkan, tetapi tidak dengan cara yang efisien, karena itu bertentangan dengan sifat LVM - kemungkinan untuk melakukan sesuatu secara langsung .

  1. Karena sifat volume logis yang tidak bersebelahan pada volume fisik saya, saya harus entah bagaimana memindahkannya di awal volume fisik. The pvmoveperintah, seperti yang disarankan oleh @frostschutz dapat bergerak LVsdalam PV:

    root@wheezy:/home/a# pvmove --alloc=anywhere /dev/md0:89600-102950 /dev/md0:0-12070
    /dev/md0: Moved: 100.0%
    
    root@wheezy:/home/a# pvs -v --segments /dev/md0
        Using physical volume(s) on command line
      PV         VG     Fmt  Attr PSize   PFree   Start SSize  LV   Start Type   PE Ranges          
      /dev/md0   system lvm2 a--  465.53g 418.38g     0     38 boot     0 linear /dev/md0:0-37      
      /dev/md0   system lvm2 a--  465.53g 418.38g    38    512 root     0 linear /dev/md0:38-549    
      /dev/md0   system lvm2 a--  465.53g 418.38g   550   5120 usr      0 linear /dev/md0:550-5669  
      /dev/md0   system lvm2 a--  465.53g 418.38g  5670   2560 tmp      0 linear /dev/md0:5670-8229 
      /dev/md0   system lvm2 a--  465.53g 418.38g  8230   3840 var      0 linear /dev/md0:8230-12069
      /dev/md0   system lvm2 a--  465.53g 418.38g 12070 107106          0 free  
    
  2. Sekarang PVsiap untuk menyusut ke ukuran SSD (80GB). 80 gigabyte sebenarnya adalah 80000000000 byte:

    root@wheezy:/home/a# pvresize --setphysicalvolumesize 80000000000B /dev/md0
      Physical volume "/dev/md0" changed
      1 physical volume(s) resized / 0 physical volume(s) not resized
    
    root@wheezy:/home/a# pvs
      PV         VG     Fmt  Attr PSize  PFree 
      /dev/md0   system lvm2 a--  74.50g 27.36g
    
  3. Setelah ini, saya bisa mengubah ukuran array itu sendiri. Tidak ada filesystem pada level ini, jadi saya berakhir hanya dengan satu mdadm --growperintah, yang sebenarnya dapat digunakan untuk mengecilkan array juga. Ukurannya harus dimasukkan kibibytes, jadi itu adalah 80000000000/1024 = 78125000:

    root@wheezy:/home/a# mdadm --grow --size=78125000 /dev/md0
    mdadm: component size of /dev/md0 has been set to 78125000K
    
    root@wheezy:/home/a# mdadm -D /dev/md0
    /dev/md0:
            Version : 1.2
      Creation Time : Thu Dec  4 12:20:22 2014
         Raid Level : raid1
         Array Size : 78125000 (74.51 GiB 80.00 GB)
      Used Dev Size : 78125000 (74.51 GiB 80.00 GB)
       Raid Devices : 2
      Total Devices : 1
        Persistence : Superblock is persistent
    
        Update Time : Thu Dec  4 17:56:53 2014
              State : clean, degraded 
     Active Devices : 1
    Working Devices : 1
     Failed Devices : 0
      Spare Devices : 0
    
               Name : wheezy:0  (local to host wheezy)
               UUID : 44ea4079:b3b837d3:b9bb2ca1:1b95272a
             Events : 60
    
        Number   Major   Minor   RaidDevice State
           0       8       16        0      active sync   /dev/sdb
           1       0        0        1      removed
    
  4. Sekarang saatnya menambahkan SSD yang ada ke array dan membiarkannya membangun kembali:

    root@wheezy:/home/a# mdadm --add /dev/md0 /dev/sdc
    mdadm: added /dev/sdc
    
    root@wheezy:/home/a# cat /proc/mdstat 
    Personalities : [raid1] 
    md0 : active raid1 sdc[2] sdb[0]
          78125000 blocks super 1.2 [2/1] [U_]
          [>....................]  recovery =  1.3% (1081920/78125000)         finish=11.8min speed=108192K/sec
    
    unused devices: <none>
    

Setelah membangun kembali saya memiliki array yang sehat. Anggotanya dapat ditukar dan instalasi GRUB dapat dilakukan secara rutin (setelah boot ke sistem produksi) dengan grub-install /dev/sdc.

Neurotransmitter
sumber
Saya harap Anda tidak membuat PV Anda terlalu besar; jika SSD adalah 80GB, Anda mungkin tidak dapat mengatur PV Anda ke 80GB apa dengan offset karena partisi dan metadata. Juga, tentu saja ini adalah operasi online, semuanya, tidak perlu live cd.
frostschutz
@ frostschutz, seperti yang mungkin Anda lihat, saya belum mengatur PV saya menjadi 80 gigabyte, tetapi menjadi 74,5 gibibytes (langkah 3) dan ini adalah ruang yang cukup untuk mencocokkan ukuran SSD. Juga, LV dipasang dan digunakan oleh sistem, jadi saya harus boot ke beberapa sistem hidup.
Neurotransmitter