Sunday, January 19, 2025

Gộp dung lượng giữa 2 ổ đĩa trong Linux

-

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ả.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories