Làm cách nào để kết hợp hai khối hợp lý nằm trên một khối vật lý duy nhất trong LVM?


14

Tôi có hai khối hợp lý, một khối được gắn là /, cái còn lại được gắn là / home.

Tôi muốn kết hợp chúng, bởi vì / âm lượng liên tục hết dung lượng. (Vâng, tôi biết những gì sử dụng tất cả không gian đó; không, tôi không thể xóa nó.)

Tôi sẵn sàng hạ máy xuống trong một hoặc hai ngày để làm việc đó.

HĐH: Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(CentOS)


1
Tại sao không chỉ tăng /âm lượng, đó không phải là điểm sử dụng LVM?
jasonwryan

2
@jasonwryan Tại sao tôi cần điều chỉnh thủ công cách phân bổ không gian đĩa? Không phải đó là toàn bộ quan điểm của một hệ thống tập tin sao?
Nick ODell

@NickODell Không. Nếu một âm lượng quá nhỏ để chứa dữ liệu, thì nó chỉ quá nhỏ. Dung lượng tổng thể là một yếu tố của kích thước khối lượng, không phải kích thước hệ thống tập tin. Khối lượng logic làm cho nó dễ dàng thay đổi kích thước các khối lượng được gắn kết và hợp nhất các tài nguyên lưu trữ khác nhau thành một khối lượng, mặc dù. Với LVM, bạn sẽ có thể thực hiện những gì jasonwryan đang đề xuất mà không cần khởi động lại: đảm bảo người dùng thường xuyên đăng xuất (miễn phí / về nhà) umount / home lvreduce nó (đừng quên -r) gắn lại sau đó thực hiện lvextend trên hệ thống tập tin gốc và bạn đã hoàn tất. Nếu bạn muốn hợp nhất, bạn phải thực hiện một rsync.
Bratchley

@JoelDavis Nếu tôi yêu cầu tất cả người dùng đăng xuất, liệu có cần thiết để tôi khởi động lại không?
Nick ODell

@NickODell Um ... vâng? Hầu hết các hệ thống linux là máy chủ, bạn nên nhận ra rằng đó sẽ là giả định của mọi người trừ khi bạn nói khác.
Bratchley

Câu trả lời:


9

Tôi đã hoàn thành và phân vùng lại hoạt động. Tuy nhiên, vì có những khu vực bị thiếu trong cả hai hướng dẫn, tôi sẽ tóm tắt những gì tôi đã làm. Xin lưu ý rằng tôi đã thay thế tên người dùng của mình bằngzzzz và tên máy tính của tôi bằngxxxxxxx . Ngoài ra, tất cả các lệnh nên được chạy dưới quyền root trừ khi có ghi chú khác.

Đầu tiên, tôi đã sao lưu:

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

Điều này tạo ra một bản sao lưu nén của thư mục / home và đặt nó vào ổ đĩa ngoài của tôi. (Lưu ý rằng ổ đĩa ngoài của bạn sẽ có đường dẫn khác.)

Bây giờ, bạn cần khởi động lại vào chế độ người dùng đơn.

reboot

Khi máy tính của bạn bật lại, bạn cần tìm một màn hình như thế này:

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

Nhấn phím bất kỳ để làm gián đoạn điều đó. Bạn sẽ thấy một màn hình như thế này:

trung tâm khởi động grub Nhấn a, sau đó là Space, sau đó gõsingle . Nhấn Enter.

Bạn sẽ thấy một dấu nhắc như thế này:

 [root@xxxxxxx /] # 

Nhập các lệnh sau:

df -h

Nó sẽ cho bạn thấy Size, UsedAvail. Chúng tôi đang quan tâm Used.
Viết ra bao nhiêu không gian được sử dụng bởi khối lượng nhà của bạn. Chúng ta sẽ cần điều đó sau.

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

Nhớ bao nhiêu không gian khối lượng nhà bạn sử dụng? Nhân đôi điều đó và đưa nó cho lệnh này. Ví dụ, tôi có 15 gigabyte được sử dụng bởi thư mục nhà của tôi, vì vậy tôi đã định cỡ nó thành 30 gigabyte.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

Cảnh báo : Bước tiếp theo này là bước có thể mất dữ liệu. Hãy chắc chắn rằng bạn đặt kích thước lớn hơn lệnh trước đó. Thêm 5 Gigabyte để chắc chắn.

lvresize -L 35G vg_xxxxxxx/lv_home

Nói với phân vùng gốc để sử dụng tất cả không gian mà chúng ta vừa giải phóng.

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

Sao chép dữ liệu của bạn vào phân vùng gốc

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

(Nhân tiện, điều đó -arất quan trọng, vì nếu không, mọi thứ sẽ được sở hữu bởi root và bạn không muốn điều đó.)
Hãy kiểm tra nhanh xem dữ liệu có được sao chép chính xác không:

ls -lR /home

Bây giờ chúng tôi loại bỏ phân vùng nhà, và nói với root để lấy lại không gian mới.

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

Tại thời điểm này, tôi đã phạm một sai lầm lớn, một lỗi mà bạn có thể học hỏi. Tôi đã khởi động lại và khi hệ thống hoạt động trở lại, nó đã từ chối gắn phân vùng gốc của tôi dưới dạng đọc-ghi vì nó không thể gắn kết phân vùng / nhà của tôi. Vì vậy, trước khi khởi động lại, chúng ta gõ

nano /etc/fstab

Một trong những dòng đó sẽ báo cho hệ thống gắn kết phân vùng / home. Đặt một #trước nó. Nhấn Ctrl-O, Enter, Ctrl-X. Hiện nay bạn có thể khởi động lại.

(Theo giả thuyết, nếu bạn quên chỉnh sửa fstab như tôi đã làm, lệnh để gắn kết phân vùng gốc của bạn là mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)


yêu chi tiết!
nmr

Tôi đã gặp phải một vấn đề tương tự, nhưng tôi không có quyền truy cập vật lý vào máy. Có cách nào để làm điều này mà không yêu cầu khởi động vào chế độ một người dùng không?
Thất vọngWithFormsDesigner

@FrustratedWithFormsDesigner Về mặt lý thuyết, vâng. Nếu bạn có quyền truy cập ssh, bạn có thể sao lưu /home. Sau đó, miễn là bạn có thể ngắt kết nối /home, bạn có thể loại bỏ nó. Tuy nhiên, tôi không thực sự đủ điều kiện để nói chuyện với bạn trong suốt quá trình. Đây là một cái gì đó bạn nên hỏi một câu hỏi mới về.
Nick ODell

1
@NickODell: Tôi đã hỏi một câu hỏi mới: askubuntu.com/questions/1115913/...
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner Đó là lời khuyên tốt hơn nhiều so với những gì tôi có thể cung cấp cho bạn.
Nick ODell

3

CẢNH BÁO: Sao lưu tất cả dữ liệu quan trọng trước khi làm bất cứ điều gì!

Bạn sẽ cần phải di chuyển tất cả dữ liệu từ phân vùng / home sang phân vùng khác, phân vùng cục bộ hoặc ổ đĩa ngoài hoặc bất cứ nơi nào khác mà bạn có đủ không gian.

Xóa lv / home và sau đó mở rộng lv / (root)

Sao chép dữ liệu trở lại thư mục / home

Chỉnh sửa 1

Câu trả lời ở trên là giả sử bạn không có đủ dung lượng trong phân vùng gốc để đặt dữ liệu vào phân vùng chính.

Nếu đây không phải là trường hợp, chỉ cần gắn phân vùng nhà ở một nơi khác và sao chép dữ liệu, ví dụ:

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

Sau đó, chỉ cần loại bỏ phân vùng nhà và mở rộng phân vùng gốc


3

Bạn có thể làm điều đó mà không cần bất kỳ bộ nhớ ngoài, chạy từ /, nhưng bạn sẽ cần phải ngắt kết nối/home .

Đây không phải là một quy trình đặc biệt rủi ro nếu bạn cẩn thận, nhưng dù sao, lời khuyên tiêu chuẩn được áp dụng: tạo bản sao lưu trước và kiểm tra chúng.

Tôi sẽ sử dụng foocho tên nhóm âm lượng roothomelàm tên âm lượng hợp lý. Điều này làm cho các đường dẫn âm lượng hợp lý foo/rootfoo/home, các đường dẫn thiết bị /dev/mapper/foo-root/dev/mapper/foo-home . Tôi giả sử rằng chúng nằm trong cùng một nhóm âm lượng, nếu không, điều này trở nên phức tạp hơn và phụ thuộc vào cách bố trí âm lượng vật lý của hai nhóm âm lượng.

Đầu tiên, unmount /homevà chạy e2fsck -f /dev/mapper/foo-home. Sau đó thu nhỏ hệ thống tập tin trước và khối lượng logic tương ứng. Chạy resize2fs /dev/mapper/foo-home NNNNnơi NNNN là số khối bạn muốn giữ lại bên trong khối lượng (bạn có thể sử dụng kB hay MB hoặc GB thay vì với các hậu tố K, Mhay G). Sau khi thu hẹp hệ thống tập tin, thu nhỏ khối lượng hợp lý với lvresize -L MMMM foo/homenơi MMMM là một số megabyte (lưu ý rằng các đơn vị mặc định là khác nhau từ resize2fs, nhưng bạn có thể sử dụng hậu tố cùng K, M, G). Hãy cẩn thận để không thu nhỏ khối lượng logic hơn hệ thống tập tin - đây là một bước nguy hiểm trong quy trình này.

Hiện tại có phòng không sử dụng trong nhóm âm lượng. Chạy lvresize -l +100%FREE foo/rootđể làm cho âm lượng gốc lấy tất cả không gian trống trong nhóm âm lượng. Sau đó chạy resize2fs /dev/mapper/foo-root(không có tham số kích thước) để phóng to hệ thống tập tin để mở rộng toàn bộ khối lượng logic; mở rộng có thể được thực hiện trong khi âm lượng được gắn kết.

Bây giờ bạn có chỗ để sao chép một số tập tin. Nếu bạn không có đủ chỗ cho mọi thứ, hãy di chuyển nhiều nhất có thể, sau đó lặp lại quy trình.

Khi bạn đã sao chép tất cả các tệp ra /home, bạn đã sẵn sàng để hủy nó. Xác minh đó /homelà trống (nếu bạn di chuyển các tệp) hoặc tất cả các tệp trong /homeđã được sao chép vào /root(nếu bạn đã sao chép các tệp). Để phá hủy khối lượng logic không cần thiết, hãy chạy lvremove foo/home. Cuối cùng, phóng to âm lượng gốc với lvresize -l 0%FREE foo/rootvà hệ thống tập tin của nó với resize2fs /dev/mapper/foo-home.


Lưu ý: / home đã từ chối ngắt kết nối cho đến khi tôi khởi động lại vào chế độ một người dùng.
Nick ODell

Lưu ý: Nó được gọi là vg_ (tên máy) và lv_home
Nick ODell

Ok, tôi đã làm cho nó hoạt động. Có một vài chi tiết bị thiếu trong hướng dẫn này, vì vậy tôi sẽ sớm đăng toàn bộ lịch sử lệnh của mình.
Nick ODell

2

OK, tôi thấy mình ở cùng một vị trí. Dường như CentOS tạo ra một khối lượng gốc nhỏ theo mặc định và lấp đầy phần còn lại của không gian của bạn /home. Tôi thậm chí đã thử nghiệm thiết lập của mình trước tiên trong một máy ảo nhưng với đĩa nhỏ hơn, CentOS không tạo được âm lượng chính. Tôi đã xử lý vấn đề này trước khi trở nên hạn chế về không gian tho 'và cũng tìm ra cách không phải vào chế độ người dùng. Như sau:

Truy cập vào máy, ssh vẫn ổn (giả sử người dùng không root).

  1. cd / vì vậy bạn không có trong thư mục nhà
  2. sudo -s chúng tôi sẽ root cho tất cả những điều này
  3. lsof /home kiểm tra xem không có ai sử dụng âm lượng nhà, không nên
  4. mv, tarhoặc tương tự nội dung của nhà ở một nơi khác
  5. lvremove centos/home
  6. Chỉnh sửa /etc/fstabvà nhận xét hoặc xóa dòng cho/home
  7. Di chuyển nội dung của ngôi nhà mà bạn đã sao lưu trước khi quay lại /home- bạn hiện đang ở vị trí an toàn, khởi động lại ở đây sẽ ổn
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root trên CentOS 7, những người khác có thể sử dụng resize2fs
  10. df -h bạn đã thành công chưa

Hy vọng điều này làm cho nó dễ dàng hơn cho một ai đó. Nó thực sự là khá tuyệt vời những gì bạn có thể làm trực tiếp trên các hệ thống tập tin ngày nay.


Nó chắc chắn dễ dàng hơn nếu bạn không cần di chuyển bất kỳ dữ liệu nào. :)
Nick ODell
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.