लॉजिकल वॉल्यूम (lv) को दूसरे वॉल्यूम ग्रुप (vg) में कैसे मूव / कॉपी करें?


17

असल में, मैं कई लॉजिकल वॉल्यूम (lv) को एक नए वॉल्यूम ग्रुप (vg) में ले जाना / कॉपी करना चाहता हूं । नया वॉल्यूम समूह भौतिक संस्करणों के एक नए सेट पर रहता है। क्या किसी को पता है कि उन तार्किक संस्करणों के अंदर डेटा को नुकसान पहुँचाए बिना सुरक्षित रूप से कैसे करना है ??


क्या आप अधिक विवरण प्रदान कर सकते हैं? क्या आप जानते हैं कि नया वीजी और एलवी कैसे बनाया जाता है? क्या आप डेटा विभाजन या अपने रूट विभाजन को स्थानांतरित कर रहे हैं?
पैंथर

@ bodhi.zazen: वास्तव में मैं एक प्रकार के डेटा विभाजन को स्थानांतरित करने का प्रयास कर रहा था। मेरा मतलब "तरह" से था, वे तार्किक वॉल्यूम वर्चुअल मशीन हैं। (यानी उन तार्किक संस्करणों को वर्चुअल मशीन में ब्लॉक डिवाइस के रूप में दिखाया गया है)। वैसे भी, मैं स्थिति को अपने तरीके से संभालने में सक्षम था। मेरे उत्तर में चरण दिए गए हैं। हालाँकि, मेरी विधि पर टिप्पणी करने के लिए आपका और आप सभी का स्वागत है। यदि इस तरह का कार्य करने के लिए कोई बेहतर तरीका है / तो कृपया इसे साझा करने के लिए पर्याप्त रूप से तैयार रहें। :)
कोई नहीं

मैंने सबसे पहले नया PV / LV बनाया होगा, VM को बंद किया, फिर dd के साथ डेटा कॉपी किया, नए VM को बूट किया और पुष्टि की कि यह काम कर रहा है।
पैंथर

जवाबों:


12

vgmerge आपको दो वीजी का विलय करने देता है। यदि आप एक से अधिक वीजीएस पर वापस जाना चाहते हैं , तो आप वीजी के भीतर डेटा ले जाने के लिए pvmove का उपयोग कर सकते हैं , और vgsplit कर सकते हैं।


एक नोट। ऐसा करने के लिए, आपके पास अस्थायी रूप से ऑनलाइन वीवी को दूसरे वीजी को स्थानांतरित करने के लिए उपयोग किया जाना चाहिए। निश्चित रूप से स्थानांतरण के बाद आपको / etc / fstab और अन्य प्रभावित कॉन्फ़िगरेशन को अपडेट करना चाहिए, और रिबूट के लिए कुछ ऑफ़लाइन समय की योजना बनाना चाहिए, और अंत में अन्य कॉन्फ़िगरेशन अपडेट करना चाहिए। यदि आप रूटफ़्स या बूटफ़्स के साथ कुछ क्रिया करते हैं, तो आपको रिकवरी मुख्य प्रणाली के लिए कुछ लिनक्स लाइव डिस्ट्रो मिलना चाहिए।
ज़नीक

10

इसे .img फ़ाइल में कॉपी करने का कोई कारण नहीं है, बस पहले lvcreate करें, फिर सीधे इसे कॉपी करें:

lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
dd if=/dev/volume-group/snapshot-name of=/dev/new-volume-group/new-logical-volume

2
यह बहुत कम है। यह नहीं कहता है कि वास्तव में उल्लिखित आकार क्या हैं - उदाहरण के लिए <आकार> बहुत छोटा हो सकता है, क्योंकि यह केवल स्नैपशॉट अंतर के लिए है।
गोर

1
@ एक वैध बिंदु था, लेकिन वह नीचे किसी के जवाब का जवाब नहीं दे रहा था, जो उस समय पहली बार था। अतिरिक्त संदर्भ के लिए पढ़ें।
टोबियास जे

7

ठीक है, मैं स्थिति को अपने तरीके से संभालने में सक्षम था। यहाँ मैंने जो कदम उठाए हैं:

1) लक्ष्यीकरण तार्किक आयतन का एक स्नैपशॉट लें।

lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume

नोट: स्नैपशॉट का आकार आपकी इच्छानुसार बड़ा या छोटा हो सकता है। स्नैपशॉट अवधि के दौरान परिवर्तनों को पकड़ने के लिए पर्याप्त स्थान होने से क्या मायने रखता है।

2) स्नैपशॉट सामग्री का उपयोग करके एक छवि प्रति बनाएँ dd

dd if=/dev/volume-group/snapshot-name of=/tmp/backup.img

3) लक्ष्यीकरण (नए) वॉल्यूम समूह में पर्याप्त आकार का एक नया तार्किक आयतन बनाएं।

lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name

4) उपयोग कर छवि बैकअप से नए तार्किक मात्रा में डेटा लिखें dd

dd if=/tmp/backup.img of=/dev/new-volume-group/new-logical-volume

5) का उपयोग कर स्नैपशॉट और छवि बैकअप हटाना lvremoveऔर rmक्रमशः।

यह सब लोगों को है ... आशा है कि यह किसी को मदद करता है :)


यदि किसी के पास बेहतर विकल्प / तरीका है, तो मुझे भी बताएं :-)
कोई भी व्यक्ति

अस्थायी बैकअप के लिए ising backup.img बैकअप पूर्णतः अनावश्यक है। एलवी को गंतव्य न करने की स्थिति में, आप सीधे स्रोत स्नैपशॉट से dd कर सकते हैं।
11

3

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

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

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

सारांश: हम लॉजिकल ग्रुप lg1 के साथ वॉल्यूम समूह vg1 बनाते हैं, और vv2 को lv2 के साथ बनाते हैं, और vg2 में lv1 की एक प्रति बनाते हैं।

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

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

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

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

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

pvcreate /dev/loop1 /dev/loop2

क्रमशः / देव / लूप 1 और / देव / लूप 2 पर वॉल्यूम समूह vg1 और vg2 बनाएं।

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

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

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

Lv1 और lv2 पर ext4 फाइल सिस्टम बनाएं।

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.

1
यह सिर्फ व्यर्थ है। आपको फाइल सिस्टम को अनमाउंट करना होगा, वॉल्यूम को निष्क्रिय करना होगा आदि हो सकता है। आप डेटा को अनमाउंट करें और साथ ही डेटा को कॉपी करें।
user189142

पहला, जैसा कि user189142 ने कहा, यह व्यर्थ है। दूसरा, यह केवल उस स्थिति के साथ लागू किया जाता है जब हम स्थानांतरित वॉल्यूम का उपयोग करके सेवाओं को रोक सकते हैं। यह 24/7 चलने वाली सेवाओं के साथ समस्या है, और टेराबाइट्स के साथ गिने जाने वाले डेटा के साथ वॉल्यूम बहुत बड़ा है। इस कारण से, इस प्रक्रिया को बहुत लंबे समय तक सेवा की आवश्यकता है। यह कारण, बहुत आसान है बस नई मात्रा, rsync ऑनलाइन बना रहा है, तो कम समय के लिए rsync ऑफ़लाइन के साथ अद्यतन, रीमाउंट और ऑनलाइन सिस्टम के लिए ऑनलाइन स्थिति। बेशक, बहुत अच्छा विचार स्रोत मात्रा से अनावश्यक डेटा मिटा दिया गया है। शायद अस्थायी रूप से इसे कुछ अस्थायी स्थान पर स्थानांतरित कर दें।
ज़नीक

3

4 उत्तर अब तक सभी याद करते हैं कि मात्रा का सटीक आकार अक्सर ज्ञात नहीं है। lvdisplayकेवल 2 दशमलव स्थानों पर गोल मान दिखाता है और man lvdisplayउपलब्ध विकल्पों के लिए केवल अन्य आदेशों को इंगित करता है। निम्न MiB का चयन करता है, जो कि 4 MiB के डिफ़ॉल्ट LVM ब्लॉक आकार के साथ पर्याप्त रूप से सटीक है:

lvdisplay --units m

MiB भी के लिए डिफ़ॉल्ट इकाई --sizeहै lvcreate। यदि संदेह है, lvdisplayतो लक्ष्य वॉल्यूम बनाने के बाद सही आकार की दोबारा जांच करें । फिर अन्य उत्तर के रूप में एक प्रतिलिपि बनाने के लिए आगे बढ़ें। इसके अलावा, मैं उदाहरण के साथ कॉपी को सत्यापित करने की सलाह दूंगाcmp

यहाँ क्यों स्नैपशॉट का उपयोग किया गया है और यह क्या सुरक्षा करता है और क्या सुरक्षा नहीं करता है:

  • स्नैपशॉट इसलिए बनाया जाता है ताकि सारा डेटा कॉपी हो जाए क्योंकि यह उस समय था जब स्नैपशॉट बनाया गया था। प्रतिलिपि प्रक्रिया के दौरान स्रोत की मात्रा पर गतिविधियाँ प्रतिलिपि में परिलक्षित नहीं होंगी।

  • स्नैपशॉट ddकमांड लाइन में मानवीय त्रुटियों से स्रोत की मात्रा को भी बचाता है । यदि आप गलती से स्नैपशॉट को लिखते हैं, तो केवल स्नैपशॉट का डेटा क्षतिग्रस्त हो जाएगा और आप केवल स्नैपशॉट निकाल सकते हैं और शुरू कर सकते हैं।

  • प्रतिलिपि प्रक्रियाओं के दौरान लक्ष्य मात्रा संरक्षित नहीं है। यदि कोई अन्य व्यवस्थापक (या एक स्वचालित प्रक्रिया जैसे ओएस-प्रोबर dracut) अपूर्ण मात्रा को मापता है , तो माउंट चीजों को खराब कर सकता है। (यहां तक ​​कि केवल-पढ़ने के लिए माउंट अभी भी वॉल्यूम में जर्नल प्रविष्टियां लिख सकता है।)


2

मैं अपनी पेशकश करूंगा:

umount /somedir/

lvdisplay /dev/vgsource/lv0 --units b

lvcreate -L 12345b -n lv0 vgtarget

dd if=/dev/vgsource/lv0 of=/dev/vgtarget/lv0 bs=1024K conv=noerror,sync status=progress

mount /dev/vgtarget/lv0 /somedir/

यदि सब कुछ अच्छा है, तो स्रोत को हटा दें

lvremove vgsource/lv0

क्या होगा अगर सोर्स वॉल्यूम बहुत बड़ा है और सर्विस या सिस्टम को रोका नहीं जाना चाहिए?
11:28 बजे ज़नीक

0

यदि आपको वीजी ए से दूसरे वीजी बी में तार्किक मात्रा की प्रतिलिपि बनाने की आवश्यकता है, तो मुझे एक दिलचस्प संस्करण का उपयोग करके मिला partclone। तब dd के साथ स्नैपशॉट कॉपी करना एक अच्छा तरीका है, लेकिन अगर आपका फाइल-सिस्टम भरा नहीं है तो यह धीमा हो सकता है। यह समाधान बहुत तेज़ है क्योंकि यह केवल प्रयुक्त ब्लॉकों की प्रतिलिपि बनाता है।

  1. सबसे पहले स्रोत LV का एक स्नैपशॉट बनाएं
lvcreate --snapshot --size 1G /dev/sourcevg/lv --name lv-backup

--sizeयहाँ कितना लिखने से पहले हो सकता है स्नैपशॉट विकलांग हो जाएगा

  1. VG। गंतव्य गंतव्य LV
lvcreate --size <new_lv_size> /dev/destvg --name newlv

new_lv_size स्रोत LV का आकार कम से कम होना चाहिए

  1. LV के डेस्टिनेशन पर स्रोत lv बैकअप से फाइल-सिस्टम को कॉपी करें
partclone.<fs_type> --dev-to-dev --source /dev/sourcevg/lv-backup --output /dev/destvg/newlv

fs_typeहो सकता है ext4, fat32, btrfs, xfs, ... किसी भी एफएस partclone द्वारा समर्थित

  1. स्नैपशॉट हटाएँ
lvremove /dev/sourcevg/lv-backup
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.