क्या एक वॉल्यूम ग्रुप से दूसरे में लॉजिकल वॉल्यूम को स्थानांतरित करने / कॉपी करने का एक सरल तरीका है? (LVM2)


15

मैं घर पर अपने सर्वर पर डिस्क के एक गुच्छा को फिर से व्यवस्थित कर रहा हूं और मैं खुद को एलवीएम तार्किक संस्करणों के एक गुच्छा को दूसरे वॉल्यूम समूह में स्थानांतरित करने की इच्छा की स्थिति में पाता हूं। क्या ऐसा करने के लिए एक सरल तरीका है? मैंने एक cplvकमांड का उल्लेख देखा, लेकिन यह या तो पुराना है या ऐसा कुछ नहीं है जो लिनक्स के लिए कभी उपलब्ध था।

जवाबों:


20

यदि आप तार्किक वॉल्यूम के लिए स्रोत वॉल्यूम समूह के बाकी हिस्सों से भौतिक वॉल्यूम के एक अलग सबसेट पर होने की व्यवस्था कर सकते हैं ( lvconvert sourcevg/sourcelv /dev/pv1 ...मदद कर सकते हैं), तो आप vgsplitlv को एक नए vg में विभाजित करने और नए vg vgmergeको मर्ज करने के लिए उपयोग कर सकते हैं लक्ष्य वीजी।

यद्यपि LVM में एक मिररिंग सुविधा है, आप वॉल्यूम समूहों के बीच एक प्रतिलिपि बनाने के लिए (पूरी तरह से) इसका उपयोग नहीं कर सकते, क्योंकि दर्पण के दोनों पैर एक ही vg पर रहना चाहिए और एसोसिएशन को तोड़ा नहीं जा सकता

आप LVM वॉल्यूम को दूसरे तरीके से कॉपी कर सकते हैं जिस तरह से आप किसी भी वॉल्यूम को दूसरे में कॉपी कर सकते हैं: उपयुक्त आकार का एक लक्ष्य lv बनाएं, फिर सामग्री को कॉपी करें dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M। यदि स्रोत वॉल्यूम सक्रिय है, तो आप LVM को एक सुसंगत प्रतिलिपि बनाने के लिए उत्तोलन कर सकते हैं: पहले स्रोत lv का एक स्नैपशॉट लें lvcreate -s, फिर स्नैपशॉट की प्रतिलिपि बनाएँ।


1
शानदार गिल्स .... vgsplit / vgmerge शायद सिर्फ ठीक होगा: मैं इसके बाद pvmove का उपयोग कर सकता हूं ताकि भौतिक विलोपन को नई डिस्क पर ले जा सकूं और फिर पुराने वॉल्यूम को VG से हटा सकूं।
jkp

शर्म की बात है, यह मेरे लिए अलग-अलग आकार के कारण अंत में काम नहीं आया। यदि आपके लिए यह समस्या नहीं है, हालांकि मेरा सुझाव है कि यह तरीका सबसे आसान होगा।
jkp

बाद ddtune2fs यू यादृच्छिक / dev / targetvg / targetlv: (यदि आप पुराने संस्करणों फेंक करने के लिए जल्दी मत करो), भूल नहीं नई फ़ाइल सिस्टम की UUID को बदलने के लिए
midenok

2
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

pvmove भौतिक संस्करणों के बीच डेटा स्थानांतरित कर सकता है: LVM प्रशासक की मार्गदर्शिका


10
लेकिन वॉल्यूम समूहों के बीच नहीं।
मैटबियनको

मैं फिर कहता हूँ: यह दो अलग-अलग मात्रा समूहों लिए काम नहीं करता
kissgyorgy

पहले vgextendvg1 एक नए pv के साथ, फिर pvmoveआपका lv नए pv के लिए, vgsplitएक अस्थायी vg जिसे आप vgmergevg2 में देखते हैं। तब pvmoveफिर से lv से vg2 मूल pv, vgreducevg2 को मध्यवर्ती pv के बारे में पढ़ने के लिए। या इंटरमीडिएट कॉपी से बचने के लिए, आप पहले vg2, pvmovelv1, और vgsplitफिर vg2 से vg1 में vg1 को मर्ज कर सकते हैं । यह @ MattBianco और @kissgyorgy की आपत्तियों का जवाब और @Gilles का समाधान लेकिन स्नैपशॉट और lowlevel की जगह के बराबर है चाहिए ddएक सेpvmove
marcz

1

डेबियन स्ट्रेच (9.0) में LVM के रूप में, अर्थात् 2.02.168-2 , और, और, और vgmerge, के संयोजन का उपयोग करके वॉल्यूम समूहों में एक तार्किक वॉल्यूम की एक कॉपी करना संभव है । चूंकि एक चाल कॉपी और डिलीट का संयोजन है, यह एक चाल के लिए भी काम करेगा।lvconvertvgsplit

वैकल्पिक रूप से, आप pvmoveकेवल वॉल्यूम को स्थानांतरित करने के लिए उपयोग कर सकते हैं ।

लूप उपकरणों और lvconvertनिम्न का उपयोग करके एक पूर्ण आत्म-निहित उदाहरण सत्र ।

सारांश: हम मात्रा समूह बनाने के vg1तार्किक मात्रा के साथ lv1, और vg2साथ lv2, और की एक प्रतिलिपि बनाने lv1में vg2

फाइलें बनाएं।

truncate pv1 --size 100MB
truncate pv2 --size 100MB

फ़ाइलों पर लूप डिवाइस सेट करें।

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

लूप डिवाइस पर भौतिक वॉल्यूम बनाएं (LVM द्वारा उपयोग के लिए लूप उपकरणों को इनिशियलाइज़ करें)।

pvcreate /dev/loop1 /dev/loop2

मात्रा समूह बनाएं vg1और vg2पर /dev/loop1और /dev/loop2 क्रमशः।

vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2

लॉजिकल वॉल्यूम बनाएं lv1और lv2पर vg1और vg2क्रमशः।

lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2

पर ext4 filesystems बनाएँ lv1और lv2

mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2

वैकल्पिक रूप से, कुछ लिखें lv1ताकि आप बाद में जांच सकें कि कॉपी सही तरीके से बनाई गई थी। बनाओ vg1निष्क्रिय।

vgchange -a n vg1

टेस्ट मोड में मर्ज कमांड चलाएँ। इसमें विलीन हो lv1जाता है lv2

vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1

और फिर असली के लिए।

vgmerge -A y -l -v vg2 vg1

फिर lv1उपयोग करके RAID 1 दर्पण जोड़ी बनाएं lvconvert। <> तर्क बताता lvconvertहै कि मिरर कॉपी lv1_copyपर बनाना है /dev/loop2

lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2

फिर दर्पण को विभाजित करें। नया LV अब है lv1_copy

lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1

बनाओ vg2निष्क्रिय।

vgchange -a n vg2

तब (परीक्षण मोड)

vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1

सच में

vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1

परिणामी उत्पादन:

lvs
[...]
lv1        vg1       -wi-a-----  12.00m
lv1_copy   vg2       -wi-a-----  12.00m
lv2        vg2       -wi-a-----  12.00m

टिप्पणियाँ:

1) इनमें से अधिकांश कमांड को रूट के रूप में चलाने की आवश्यकता होगी।

2) यदि दो वॉल्यूम समूहों में तार्किक वॉल्यूम के नामों का कोई दोहराव है, तो vgmergeआगे बढ़ने से इनकार कर देगा।

3) मर्ज पर:

Logical volumes in `vg1` must be inactive

और विभाजन पर:

Logical volume `vg2/lv1` must be inactive.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.