Làm cách nào để di chuyển / sao chép âm lượng logic (lv) sang nhóm âm lượng khác (vg)?


17

Về cơ bản, tôi muốn di chuyển / sao chép một số khối lượng logic (lv) vào một nhóm âm lượng mới (vg). Nhóm âm lượng mới nằm trên một tập khối lượng vật lý mới. Có ai biết làm thế nào để làm điều đó một cách an toàn mà không làm hỏng dữ liệu bên trong các khối hợp lý đó không ??


Bạn có thể cung cấp chi tiết hơn ? Bạn có biết làm thế nào để tạo VG và LV mới? Bạn đang di chuyển một phân vùng dữ liệu hoặc phân vùng gốc của bạn?
Panther

@ bodhi.zazen: Thật ra tôi đã cố gắng di chuyển một loại phân vùng dữ liệu. Ý tôi là "loại" là, những khối logic đó là máy ảo. (tức là các khối logic đó được xuất hiện cho các máy ảo dưới dạng thiết bị khối). Dù sao, tôi đã có thể xử lý tình huống theo cách của riêng tôi. Các bước được đưa ra trong câu trả lời của tôi. Tuy nhiên, bạn và tất cả các bạn đều được chào đón để nhận xét về phương pháp của tôi. Nếu có / là một cách tốt hơn để làm điều này, xin hãy tử tế để chia sẻ nó. :)
không ai

Trước tiên tôi sẽ tạo PV / LV mới, tắt VM, sau đó sao chép dữ liệu bằng dd, khởi động VM mới và xác nhận nó hoạt động.
Panther

Câu trả lời:


11

vgmerge cho phép bạn hợp nhất hai VG. Bạn cũng có thể sử dụng pvmove để di chuyển dữ liệu trong VG và vgsplit nếu bạn muốn quay lại nhiều VG.


9

Không có lý do để sao chép nó vào tệp .img trước tiên, chỉ cần thực hiện lvcreate trước, sau đó trực tiếp sao chép nó qua:

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
Điều này là quá ngắn gọn. Nó không cho biết chính xác các kích thước được đề cập là gì - ví dụ <kích thước> có thể rất nhỏ, vì nó chỉ dành cho các khác biệt ảnh chụp.
tham gia

@ có một điểm hợp lệ, nhưng anh ấy đã trả lời câu trả lời của ai dưới đây, lần đầu tiên vào thời điểm đó. Đọc nó cho bối cảnh bổ sung.
Tobias J

7

Được rồi, tôi đã có thể xử lý tình huống theo cách của riêng tôi. Dưới đây là các bước tôi đã thực hiện:

1) Chụp nhanh khối lượng logic nhắm mục tiêu.

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

Lưu ý: Kích thước của ảnh chụp có thể lớn hoặc nhỏ như bạn muốn. Điều quan trọng là có đủ không gian để nắm bắt các thay đổi trong thời gian chụp nhanh.

2) Tạo bản sao hình ảnh của nội dung ảnh chụp bằng cách sử dụng dd

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

3) Tạo một khối logic mới có kích thước đủ trong nhóm âm lượng nhắm mục tiêu (mới).

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

4) Ghi dữ liệu vào ổ đĩa logic mới từ bản sao lưu ảnh bằng cách sử dụng dd

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

5) xóa sao lưu ảnh chụp và sao lưu bằng cách sử dụng lvremovermtương ứng.

Đó là tất cả mọi người ... Hy vọng điều này sẽ giúp được ai đó :)


Nếu ai đó có tùy chọn / phương pháp tốt hơn, hãy cho tôi biết :-)
không ai

2

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ụ hoàn toàn khép kín sử dụng các thiết bị lặp và làm lvconverttheo.

Tóm tắt: chúng tôi tạo nhóm âm lượng vg1 với khối lượng logic lv1 và vg2 với lv2 và tạo một bản sao của lv1 trong 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 âm lượng vg1 và vg2 trên / dev / loop1 và / dev / loop2 tương ứng.

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

Tạo khối lượng logic lv1 và lv2 trên vg1 và vg2 tương ứng.

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

Tạo các hệ thống tập tin ext4 trên lv1 và lv2.

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

Tùy chọn, viết một cái gì đó trê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 vg1 khô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 lv1 thà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 từ lv1việc sử dụng lvconvert. Đối số <> cho biết lvconvertđể sao chép bản sao 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ờ là lv1_copy.

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

Làm cho vg2 khô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.

nó chỉ là vô nghĩa. Bạn phải ngắt kết nối các hệ thống tập tin, hủy kích hoạt ổ đĩa, v.v. Bạn cũng có thể ngắt kết nối thư mục và sao chép dữ liệu.
dùng189142

2

Cả 4 câu trả lời đều bỏ lỡ rằng kích thước chính xác của âm lượng thường không được biết đến. lvdisplaychỉ hiển thị các giá trị được làm tròn đến 2 vị trí thập phân và man lvdisplaychỉ trỏ đến các lệnh khác cho các tùy chọn khả dụng. Sau đây chọn MiB, đủ chính xác với kích thước khối LVM mặc định là 4 MiB:

lvdisplay --units m

MiB cũng là đơn vị mặc định cho --sizecác lvcreate. Nếu nghi ngờ, hãy kiểm tra lại kích thước chính xác lvdisplaysau khi tạo âm lượng đích. Sau đó tiếp tục như trong các câu trả lời khác để tạo một bản sao. Hơn nữa, tôi khuyên bạn nên xác minh bản sao , ví dụ với cmp.

Ở đây tại sao một ảnh chụp nhanh được sử dụng và những gì nó bảo vệ và không bảo vệ:

  • Ảnh chụp nhanh được thực hiện sao cho tất cả dữ liệu được sao chép vào thời điểm ảnh chụp nhanh được tạo. Các hoạt động về khối lượng nguồn trong quá trình sao chép sẽ không được phản ánh trong bản sao.

  • Ảnh chụp nhanh cũng bảo vệ âm lượng nguồn khỏi các lỗi của con người trong dddòng lệnh. Nếu bạn vô tình ghi vào ảnh chụp nhanh, chỉ có dữ liệu của ảnh chụp sẽ bị hỏng và bạn chỉ cần xóa ảnh chụp nhanh và bắt đầu lại.

  • Khối lượng đích không được bảo vệ trong quá trình sao chép. Nếu một quản trị viên khác (hoặc một quy trình tự động như os-prober of dracut) lắp âm lượng không đầy đủ, giá treo có thể làm hỏng mọi thứ. (Ngay cả giá treo chỉ đọc vẫn có thể ghi các mục nhật ký vào tập.)


2

Tôi sẽ cung cấp của riêng tôi:

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/

nếu mọi thứ đều tốt, hãy xóa nguồn

lvremove vgsource/lv0

0

Nếu bạn cần sao chép một khối lượng logic từ VG A sang VG B khác, tôi đã tìm thấy một biến thể thú vị bằng cách sử dụng partclone. Ảnh chụp nhanh sau đó sao chép bằng dd là một phương pháp tốt nhưng có thể chậm nếu hệ thống tệp của bạn không đầy đủ. Giải pháp này rất nhanh vì chỉ sao chép các khối đã sử dụng.

  1. Đầu tiên tạo ảnh chụp nhanh của nguồn LV
lvcreate --snapshot --size 1G /dev/sourcevg/lv --name lv-backup

các --sizeở đây là bao nhiêu ghi có thể xảy ra trước khi chụp sẽ bị vô hiệu

  1. Tạo LV đích trong VG đích
lvcreate --size <new_lv_size> /dev/destvg --name newlv

new_lv_size ít nhất phải là kích thước của LV nguồn

  1. Sao chép hệ thống tệp từ bản sao lưu lv nguồn sang LV đích
partclone.<fs_type> --dev-to-dev --source /dev/sourcevg/lv-backup --output /dev/destvg/newlv

fs_typecó thể ext4, fat32, btrfs, xfs, ... bất cứ FS hỗ trợ bởi partclone

  1. Xóa ảnh chụp nhanh
lvremove /dev/sourcevg/lv-backup
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.