Nếu bạn muốn gộp dung lượng của đĩa mới vào đĩa gốc (root), bạn có thể sử dụng LVM (Logical Volume Manager) để thực hiện điều này. LVM cho phép bạn kết hợp nhiều phân vùng ổ đĩa thành một logical volume lớn, và bạn có thể tăng kích thước của logical volume này bằng cách thêm phân vùng mới vào nó.
Một lời khuyên tốt nhất bạn chỉ nên thực hiện sau khi đã thực hiện các bài kiểm tra và backup dữ liệu đầy đủ trước khi thực hiện.
Việc gộp nhiều disk vào 1 phân vùng cũng tương tự như bạn đang chạy raid0, vì vậy bạn hãy cân nhắc đến việc mất mát dữ liệu khi sử dụng phương pháp gộp disk này. Để thực hiện việc này, bạn có thể thực hiện các bước sau:
Bước 1: Kiểm tra dung lượng hiện tại của các phân vùng trên máy tính của bạn bằng cách chạy lệnh df -h
:
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 1.9G 0 1.9G 0% /dev
tmpfs 392M 1.6M 391M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 97G 19G 74G 21% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda2 974M 152M 755M 17% /boot
overlay 97G 19G 74G 21% /var/lib/docker/overlay2/6dc170a674db2cf0537295c5411c659d863fd046c70971e7ac57c1738331835f/merged
overlay 97G 19G 74G 21% /var/lib/docker/overlay2/86ea2205ff6149da915c3941741809e0d6d35041ddac5014f89ef4fe54f3ff96/merged
overlay 97G 19G 74G 21% /var/lib/docker/overlay2/7eea93c53cceceb3c3ac355a5191229d11a2e6665b6ef16a6e06d26f05d6f460/merged
overlay 97G 19G 74G 21% /var/lib/docker/overlay2/5f9e19cf0b8f19a2539d5afbd304fd6676159a79ca2f40174568e5b6b3b241b7/merged
overlay 97G 19G 74G 21% /var/lib/docker/overlay2/f0819218a019eb3be44b822f2c22e879f097b13561fab1703eb7311f81d8b83b/merged
tmpfs 392M 0 392M 0% /run/user/0
Lệnh này sẽ hiển thị thông tin về dung lượng sử dụng và tổng dung lượng của các phân vùng hiện có trên máy tính của bạn.
Bước 2: Kiểm tra xem đĩa mới đã được nhận diện bởi hệ thống hay chưa bằng cách chạy lệnh sudo fdisk -l
:
$ sudo fdisk -l
Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AC7C3CF5-4C7C-4553-9A46-EEBD41C9B535
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 2101247 2097152 1G Linux filesystem
/dev/sda3 2101248 209713151 207611904 99G Linux filesystem
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 99 GiB, 106296246272 bytes, 207609856 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Hoặc sử dụng lệnh lsblk
.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 99G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 99G 0 lvm /
sdb 8:16 0 20G 0 disk
sr0 11:0 1 318M 0 rom
Hai lệnh trên sẽ liệt kê các ổ đĩa có sẵn trên hệ thống của bạn, bao gồm đĩa mới mà bạn vừa thêm vào. Như vậy từ kết quả của hai lệnh trên thì mình có ổ đĩa sdb là ổ đĩa mới thêm vào và chưa làm gì cả. Mình sẽ dùng ổ đĩa sdn đang có dung lượng 20G này để tăng dung lượng cho ổ đĩa root đang có dung lượng là 100G.
Bước 3: Sử dụng LVM để tạo một logical volume mới bằng cách sử dụng phân vùng mới của bạn. Ví dụ, nếu phân vùng mới của bạn là /dev/sdb, bạn có thể sử dụng lệnh sau để tạo một logical volume mới có tên là myvg-mylv:
Với sdb là ổ đĩa mới gắn vào chưa được sử dụng, bạn hãy dùng lệnh sudo pvcreate /dev/sdb
được sử dụng để tạo ra một physical volume (PV) trên thiết bị lưu trữ /dev/sdb
.
$ sudo pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
Xác minh physical volume (PV) đã tạo thành công.
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <99.00g 0
/dev/sdb lvm2 --- 20.00g 20.00g
Tiếp theo dùng lệnh sudo vgcreate myvg /dev/sdb
sẽ tạo ra một volume group mới có tên là myvg
sử dụng ổ đĩa /dev/sdb
.
$ sudo vgcreate myvg /dev/sdb
Volume group "myvg" successfully created
Xác minh volume group đã tạo thành công.
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <99.00g 0
/dev/sdb myvg lvm2 a-- <20.00g <20.00g
Lệnh sudo lvcreate -L +10G -n mylv myvg
sẽ tạo một logical volume mới trong volume group có tên là myvg
và gán cho nó tên là mylv
, với dung lượng là 10GB.
$ sudo lvcreate -L +10G -n mylv myvg
Logical volume "mylv" created.
Xác minh logical volume đã tạo thành công. Theo kết quả dưới thì bạn đã tạo xong logical volume với dung lượng là 10G.
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 10.00g
ubuntu-lv ubuntu-vg -wi-ao---- <99.00g
$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID 27JZpm-TW60-xCAj-4022-gcUF-mEVa-rT1WLI
LV Write Access read/write
LV Creation host, time wp-hoanghd, 2023-04-27 14:02:57 +0000
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
--- Logical volume ---
LV Path /dev/ubuntu-vg/ubuntu-lv
LV Name ubuntu-lv
VG Name ubuntu-vg
LV UUID 2zbzhP-ftFP-Ygyh-E78D-TD7b-1IKf-IZVVYb
LV Write Access read/write
LV Creation host, time ubuntu-server, 2023-03-25 23:08:53 +0000
LV Status available
# open 1
LV Size <99.00 GiB
Current LE 25343
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
Bạn cũng có thể tạo 100% dung lượng còn lại của ổ đĩa sdb cho logical volume bằng lệnh sudo lvcreate -l 100%FREE -n mylv myvg
. Nhưng trước hết mình sẽ xoá logical volume vừa tạo với dung lượng 10G ở trên bằng lệnh sudo lvremove /dev/myvg/mylv
. Trong đó, /dev/myvg/mylv
là đường dẫn đầy đủ đến logical volume cần xoá.
$ sudo lvremove /dev/myvg/mylv
Do you really want to remove and DISCARD active logical volume myvg/mylv? [y/n]: y
Logical volume "mylv" successfully removed
Sau khi xoá thành công logical volume 10G, bạn hãy chạy lại lệnh sudo lvcreate -l 100%FREE -n mylv myvg
để tạo logical volume sử dụng toàn bộ dung lượng của ổ đĩa sdb.
$ sudo lvcreate -l 100%FREE -n mylv myvg
Logical volume "mylv" created.
Xác minh logical volume đã tạo thành công. Theo kết quả dưới thì bạn đã tạo xong logical volume với toàn bộ dung lượng còn lại của sdb là 20G.
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <99.00g 0
/dev/sdb myvg lvm2 a-- <20.00g 0
Bước 4: Boot vào Gparted Live.
Như vậy khi chúng ta sử dụng lệnh lvdisplay để list các logical volume, bạn đã thấy hiện tại có 2 logical volume đó là mylv (là logical volume vừa tạo từ sdb với dung lượng 20G ở bước trên) và ubuntu-lv (100G của root). Theo mong muốn như mình đề cập ở trên thì mình sẽ gộp dung lượng của mylv vào ubuntu-lv của root.
Chúng ta hãy tải gparted-live-1.2.0-1-amd64.iso về và bằng cách nào đó bạn hãy làm cho máy ảo hoặc máy vật lý của bạn khởi động từ file iso này.
wget https://downloads.sourceforge.net/gparted/gparted-live-1.2.0-1-amd64.iso
Hãy chọn Parted Live (Default settings).
Chọn Don’t touch keymap bấm ok.
Mình chọn ngôn ngữ tiếng anh [US English] nên mình bấm 33.
Mình sẽ khởi động với giao điện command line, với lựa chọn là Enter command line prompt nên mình sẽ bấm 2 và bấm tiếp Enter.
Bạn hãy xác định đường dẫn mapper tương ứng của logical volume, thường nó sẽ nằm tại /dev/mapper
. Ví dụ như ở dưới mình đã xác định được đường dẫn mapper của các logical volume.
Sau khi xác định xong các logical volume, bạn cần gộp logical volume 20G vào ổ đĩa root của bạn bằng cách sử dụng lệnh sau:
Trong đó, ubuntu-vg là tên của volume group root của bạn, và myvg-mylv là phân vùng mới 20G của bạn. Lưu ý rằng câu lệnh vgextend ubuntu-vg /dev/mapper/myvg-mylv
sẽ thêm logical volume /dev/mapper/myvg-mylv
vào volume group ubuntu-vg
. Tuy nhiên, nếu bạn không cẩn thận có thể gây ra lỗi hệ thống, và mình khuyên bạn nên sao lưu dữ liệu quan trọng trước khi tiến hành thao tác này. Lời khuyên tốt nhất không nên sử dụng gộp 2 disk vào ổ đĩa chứa OS nếu bạn không rành Linux.
Nếu sau khi đã gộp logical volume mới vào ổ đĩa gốc của bạn, bạn có thể mở rộng phân vùng và tệp hệ thống bằng cách sử dụng lệnh lvextend -L +19.99G /dev/ubuntu-vg/ubuntu-lv
. Nếu bạn nhận được thông báo “Logical volume ubuntu-vg/ubuntu-lv successfully resized” tức là bạn đã gộp dung lượng thành công.
Kết quả trả về “Logical volume ubuntu-vg/ubuntu-lv successfully resized” cho biết bạn đã gộp dung lượng thành công.
Tiếp theo hãy chạy lệnhresize2fs /dev/ubuntu-vg/ubuntu-lv
để thay đổi kích thước của hệ thống tập tin trên logical volume đó. Nếu bạn nhận được yêu cầu chạy lệnh kiểm tra e2fsck -f /dev/ubuntu-vg/ubuntu-lv
(1) thì bạn hãy thực hiện nó (2) và sau đó chạy lại lênh resize2fs /dev/ubuntu-vg/ubuntu-lv
(3).
Nếu bạn sử dụng lệnh lsblk để kiểm tra bạn đã thấy kết quả gộp logical volume đã thành công.
Hãy khởi động lại hệ điều hành và xem kết quả.