Có cách nào đơn giản để di chuyển / sao chép một khối hợp lý từ nhóm âm lượng này sang nhóm âm lượng khác không? (LVM2)


15

Tôi đang sắp xếp lại một loạt các đĩa trên máy chủ của mình ở nhà và tôi thấy mình muốn chuyển một khối lượng logic LVM sang một nhóm âm lượng khác. Có một cách đơn giản để làm điều này? Tôi đã thấy đề cập đến một cplvlệnh nhưng điều này dường như đã cũ hoặc không phải là thứ đã từng có sẵn cho Linux.

Câu trả lời:


20

Nếu bạn có thể sắp xếp cho khối lượng logic nằm trên một tập hợp con của các khối vật lý riêng biệt với phần còn lại của nhóm âm lượng nguồn ( lvconvert sourcevg/sourcelv /dev/pv1 ...có thể giúp đỡ), bạn có thể sử dụng vgsplitđể tách lv thành một vg mới và vgmergehợp nhất vg mới vào mục tiêu vg.

Mặc dù LVM có tính năng phản chiếu, nhưng bạn không thể (hoàn toàn) sử dụng nó để tạo một bản sao giữa các nhóm âm lượng, vì cả hai chân của gương phải sống trên cùng một vg và liên kết không thể bị phá vỡ .

Bạn có thể sao chép một tập LVM sang một tập khác theo cách bạn sao chép bất kỳ tập nào sang tập khác: tạo một mục tiêu lv có kích thước phù hợp, sau đó sao chép nội dung với dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M. Nếu âm lượng nguồn được kích hoạt, bạn có thể tận dụng LVM để tạo một bản sao nhất quán: đầu tiên hãy chụp ảnh nhanh của lv nguồn lvcreate -s, sau đó sao chép ảnh chụp nhanh.


1
Brilliant Gilles .... vgsplit / vgmerge có thể sẽ ổn: Tôi có thể sử dụng pvmove sau đó để di chuyển các phạm vi vật lý sang đĩa mới và sau đó loại bỏ âm lượng cũ khỏi VG.
jkp

Thật xấu hổ, điều này cuối cùng đã không làm việc cho tôi do kích thước mức độ khác nhau. Nếu đó không phải là vấn đề với bạn mặc dù tôi đề nghị phương pháp này sẽ dễ nhất.
jkp

Sau dd(nếu bạn không vội vã bỏ tập cũ), đừng quên thay đổi UUID của các hệ thống tệp mới: Tune2fs -U Random / dev / targetvg / targetlv
midenok

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

pvmove có thể di chuyển dữ liệu giữa các ổ đĩa vật lý: Hướng dẫn của quản trị viên LVM


10
Nhưng không phải giữa các nhóm khối lượng.
MattBianco

Tôi nhắc lại: điều này không hiệu quả với hai nhóm âm lượng riêng biệt
Kissgyorgy

Đầu tiên vgextendvg1 với một pv mới, sau đó pvmovelv của bạn đến pv mới, vgsplitmột vg tạm thời mà bạn vgmergetrong vg2. Sau đó, pvmovemột lần nữa lv đến vg2 gốc pv, vgreducevg2 để có được đọc pv trung gian. Hoặc để tránh bản sao trung gian, trước tiên bạn có thể hợp nhất vg1 trong vg2, lv1 pvmovevgsplitmột lần nữa vg1 từ vg2. Điều này sẽ trả lời phản đối của @ MattBianco và @kissgyorgy và tương đương với giải pháp của @Gilles nhưng thay thế ảnh chụp nhanh và lowlevel ddbằng mộtpvmove
marcz

1

Tính đến LVM trong Debian căng (9.0), cụ thể là 2.02.168-2, nó có thể làm một bản sao của một khối lượng hợp lý giữa các nhóm khối lượng sử dụng kết hợp vgmerge, lvconvertvgsplit. Vì di chuyển là sự kết hợp của một bản sao và xóa, nên điều này cũng sẽ hoạt động cho một di chuyển.

Ngoài ra, bạn có thể sử dụng pvmoveđể chỉ di chuyển âm lượng.

Một phiên ví dụ độc lập hoàn chỉnh sử dụng các thiết bị lặp và làm lvconverttheo.

Tóm tắt: chúng ta tạo ra volume group vg1với khối lượng hợp lý lv1, và vg2với lv2, và tạo một bản sao của lv1năm vg2.

Tạo tập tin.

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

Thiết lập các thiết bị lặp trên các tập tin.

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

Tạo khối lượng vật lý trên các thiết bị vòng lặp (khởi tạo các thiết bị vòng lặp để LVM sử dụng).

pvcreate /dev/loop1 /dev/loop2

Tạo các nhóm khối lượng vg1vg2trên /dev/loop1/dev/loop2 tương ứng.

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

Tạo khối lượng logic lv1lv2trên vg1vg2tương ứng.

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

Tạo hệ thống tập tin ext4 trên lv1lv2.

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

Tùy chọn, viết một cái gì đó lên lv1để sau này bạn có thể kiểm tra bản sao đã được tạo chính xác. Làm cho vg1không hoạt động.

vgchange -a n vg1

Chạy lệnh hợp nhất trong chế độ thử nghiệm. Điều này hợp nhất lv1thành lv2.

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

Và sau đó là thật.

vgmerge -A y -l -v vg2 vg1

Sau đó, tạo một cặp nhân bản RAID 1 lv1bằng cách sử dụng lvconvert. Đối số <> nói lvconvertđể làm cho bản sao nhân bản lv1_copytrên /dev/loop2.

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

Sau đó tách gương. LV mới bây giờ lv1_copy.

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

Làm cho vg2không hoạt động.

vgchange -a n vg2

Sau đó (chế độ thử nghiệm)

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

Cho thật

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

Kết quả đầu ra:

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

GHI CHÚ:

1) Hầu hết các lệnh này sẽ cần phải được chạy dưới quyền root.

2) Nếu có bất kỳ sự trùng lặp nào về tên của các khối hợp lý trong hai nhóm âm lượng, vgmergesẽ từ chối tiếp tục.

3) Khi hợp nhất:

Logical volumes in `vg1` must be inactive

Và chia tay:

Logical volume `vg2/lv1` must be inactive.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.