Lab005: CentOS - Gộp và chia các PhysicalVolume cho trước thành LogicalVolume tùy ý
"Giả sử cho 3 ổ cứng vật lí có dung lượng 2GB, 3GB, 5GB gắn vào máy chủ CentOS. Hãy tạo ra 2 phân vùng ảo có dung lượng 4GB và 6GB"
**
I Các bước thực hiện
1.1 Cài đặt môi trường thực hành trên Hyper-V
Tại thời điểm này, trên môi trường Windows mình dùng Terminal để remote vào máy ảo, trên máy ảo đã có sẵn user l11 và địa chỉ IP LAN 192.168.1.111 sau đó dùng lệnh lsblk để hiển thị các ổ đĩa đang được gắn vào hệ thống.
Ở đây ta chỉ thấy có ổ đĩa (Disk) sda dung lượng 10GB cùng các phân vùng (Partition) sda1, sda2, sda3 được cấu hình sẵn khi cài đặt hệ điều hành.
Để giả lập tình huống một máy chủ chạy CentOS được gắn thêm 3 ổ cứng 2GB, 3GB, 5GB như đề bài, chúng ta sẽ thực hiện trên Hyper-V với một máy ảo đã được cài CentOS. Ví dụ như máy CentOS-11 trong hình, ta chọn máy ảo -> Setting:
Chúng ta chọn mục SCSI Controller -> Hard Drive -> Add:Chọn mục Hard Drive mới xuất hiện -> Virtual Hard Disk -> New:
Mục Before You Begin thường chả ai thèm đọc -> Next
Mục Choose Disk Type -> Dynamically expanding -> Next
Mục Specify Name and Location:
- Name: đặt một cái tên dễ nhớ, ví dụ như CentOS-11-VHD01 (tượng trưng cho ổ cứng gắn thêm thứ nhất)
- Location: mình thường qui hoạch để các file config, đĩa ảo.. của một máy ảo ở trong cùng 1 folder (ở đây là folder CentOS-11) cho nên phần đường dẫn mình sẽ lái hướng vào folder CentOS-11/virtualHardDisks. Đây chỉ là một lựa chọn cá nhân, nếu bạn không quan tâm thì để mặc định.
Mục Configure Disk -> Create a new blank virtual hard disk -> chọn dung lượng 2GB. Chúng ta cần tuyệt đối cẩn thận phần này vì nếu lỡ để dung lượng mặc định (127GB) thì ổ ảo này sẽ chiếm hết dung lượng ổ đĩa thực của chúng ta mất.
Cuối cùng, ta review lại các lựa chọn và nhấn Apply. Vậy là coi như chúng ta đã "cắm" một ổ cứng dung lượng 2GB vào máy chủ CentOS trên môi trường Hyper-V rồi.
Lặp lại các bước trên để tạo thêm ổ cứng dung lượng 3GB, 5GB theo yêu cầu đề bài để có kết quả như sau:
Trở về với giao diện dòng lệnh của máy ảo CentOS-11 và dùng lệnh lsblk để kiểm tra kết quả. Chúng ta có thể thấy các ổ đĩa 2GB, 3GB, 5GB lần lượt được kí hiệu là sdb, sdc, sdd. Nhưng đến đây chúng ta mới chỉ "cắm" các ổ đĩa này vào Server thôi, hoàn toàn chưa được chia phân vùng hay định dạng gì cả nên chưa thể dùng được, việc đó ta sẽ tìm hiểu ở phần tiếp theo.
**
1.2 Thứ tự các bước thực hiện
Để thêm ổ cứng vào Server thì chúng ta đều sẽ phải thực hiện các bước sau:
- Phân chia ổ cứng vật lí thành 1 hoặc nhiều phân vùng (Partition) tùy mục đích sử dụng
- Định dạng các phân vùng đã được chia ở bước trước (Format).
- Gắn phân vùng đã format vào hệ thống để sử dụng (Mount).
- Cấu hình fstab để hệ thống tự động mount các phân vùng khi khởi động.
Trong quá trình này, chúng ta có thể gặp trường hợp như đề bài đã đề cập đó là: số lượng và dung lượng các ổ đĩa cứng vật lí không khớp với nhu cầu sử dụng thực tế. Ví dụ chúng ta cần thêm 2 phân vùng có dung lượng 6GB và 4GB cho các ứng dụng trên hệ thống nhưng trong tay ta chỉ có 3 ổ cứng 2GB, 3GB, 5GB chẳng hạn.
Vậy để giải quyết bài toán này, chúng ta sẽ sử dụng công cụ LVM2 để thực hiện gộp dung lượng các ổ cứng vật lí sau đó chia ra thành các phân vùng luận lí với dung lượng tùy ý.
Cụ thể hơn, ta cần thực hiện các công việc đối với 3 ổ cứng vật lí 2GB, 3GB, 5GB như sau:
- Định dạng các ổ đĩa vật lí, chia phân vùng. Một ổ đĩa có thể được chia thành nhiều phân vùng con, trong trường hợp này ta sẽ chỉ tạo 1 phân vùng cho toàn bộ ổ đĩa cứng.
- Định dạng các phân vùng được chia.
- Tạo các PhysicalVolume từ các phân vùng được chia.
- Gộp các PhysicalVolume vào thành VolumeGroup, đây chính là bước gộp dung lượng của các ổ đĩa vật lí để chuẩn bị phân bổ lại dung lượng.
- Chia VolumeGroup thành các LogicalVolume có dung lượng, định dạng tùy nhu cầu sử dụng.
- Cấu hình fstab để hệ thống tự động mount các phân vùng luận lí khi khởi động.
**
1.3 Các câu lệnh cần dùng
Lưu ý là phần này sẽ chỉ giới thiệu và mình họa tác dụng của từng câu lệnh, nếu tuần tự làm theo thì sẽ giải quyết được bài toán theo cách thủ công. Để thực hiện bài toán một cách tự động thì chúng ta sẽ gom toàn bộ các lệnh vào thành 1 Script và chạy ở phần sau.
Cài đặt gói LVM2
Đến đây thì ổ đĩa này đã có thể sử dụng được rồi, chỉ cần "gắn" nó vào một thư mục (MountPoint) nào đó trong hệ thống là ta có thể truy cập và lưu trữ tùy ý bằng câu lệnh mount như sau:
sudo yum install lvm2 -y
Liệt kê các thiết bị lưu trữ hiện được gắn vào hệ thống - lệnh lsblk. Ở đây chúng ta cần lưu ý, với lệnh lsblk ta đã có thể nhìn thấy 3 ổ cứng mới gắn thêm có tên và dung lượng lần lượt là sdb 2GB, sdc 3GB, sdd 5GB nhưng các ổ cứng này chưa được phân vùng, định dạng hay mount vào đâu cả, tức là chưa thể sử dụng được. Lệnh fdisk -l cũng có công dụng tương tự nhưng sẽ cung cấp thông tin chi tiết hơn.
lsblk # List block devicesfdisk -l # List disks
1.3.1 Định dạng ổ đĩa vật lí và tạo phân vùng
Lệnh fdisk. Ví dụ chúng ta cần thực hiện định dạng ổ cứng sdb 2GB ở hình trên:fdisk /dev/sdb
Sau khi gõ lệnh, nhấn "m" để xem các tác vụ mà chúng ta có thể thực hiện:
Tiếp đó, ta cần trả lời 4 mục: PartitionType, PartitionNumber, FirstSector, LastSector. Trong trường hợp này ta chỉ cần tạo 1 Partition trên toàn bộ Disk -> tất cả đều chọn default value -> Enter 4 lần không cần điền giá trị. Bước tiếp theo, gõ "w" để Format ổ đĩa và tạo Partition.
Sau đó dùng lệnh lsblk để xem kết quả. Ở đây chúng ta thấy ổ đĩa sdb (disk) đã được tạo 1 phân vùng sdb1 (part).
Ta tiếp tục lấy phân vùng sdb1 trên ổ đĩa sdb để làm ví dụ. Dùng câu lệnh mkfs (Make File System) để định dạng Partition sdb1 như sau (thực hiện tương tự với phân vùng sdc1, sdd1):
mkfs -t ext4 /dev/sdb1
sudo mkdir /mnt/sdb1_mp # Tạo thư mục sdb1_mp để làm MountPointsudo mount /dev/sdb1 /mnt/sdb1_mp # Mount phân vùng sdb1 vào thư mục sdb1_mpsudo touch /mnt/sdb1_mp/new_file # Thử tạo 1 file có tên new_fle trên phân vùng vừa được mountls -la /mnt/sdb1_mp # List ra các file có trong thư mục sdb1_mp
Dùng lệnh lsblk để kiểm tra kết quả:
Thế nhưng đây không phải là mục tiêu của chúng ta ngày hôm nay, mình sẽ xóa các file đã tạo và gỡ phân vùng sdb1 ra khỏi hệ thống thư mục bằng lệnh umount, xóa thư mục MountPoint để tiếp tục thực hiện bài toán.
sudo rm -rf /mnt/sdb1_mp/new_filesudo umount /mnt/sdb1_mpsudo rm -rf /mnt/sdb1_mplsblk
**
1.3.3 Tạo PhysicalVolume
Chúng ta sẽ tạo PhysicalVolume cho các phân vùng sdb1 bằng câu lệnh pvcreate -> nhập "y" khi được hỏi và kiểm tra kết quả bằng lệnh pvdisplay:
sudo pvcreate /dev/sdb1sudo pvdisplay
"/dev/sdc1" is a new physical volume of "<3.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc1 VG Name PV Size <3.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID NRo3JL-DDnb-MOmV-aCZi-KcOz-KBxu-1sLIHg "/dev/sdd1" is a new physical volume of "<5.00 GiB" --- NEW Physical volume --- PV Name /dev/sdd1 VG Name PV Size <5.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID TZdBX2-uMLv-ueBu-1Jno-Fa9j-q3fS-4rjwkh "/dev/sdb1" is a new physical volume of "<2.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size <2.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 9JIL7s-9qKg-2Exy-TJcK-z0N0-WLqu-5RYLkr
Ở đây ta thấy, mỗi PhysicalVolume đều có 1 PV UUID phân biệt.
**
1.3.4 Tạo GroupVolume gộp dung lượng
Ở bước này, ta sẽ gộp cả 3 PhysicalVolume sdb1, sdc1, sdd1 thành 1 đối tượng ảo là GroupVolume, đây chính là bước gộp dung lượng của 3 ổ đĩa 2GB, 3GB, 5GB thành 1 GroupVolume có dung lượng 10GB để phục vụ việc phân bổ về sau. Ta sẽ dùng câu lệnh vgcreate để tạo GroupVolume và lệnh gvdisplay để kiểm tra kết quả. Cú pháp câu lệnh như sau:
vgcreate <VolumeGroupName> <PhysicalVolume1> <PhysicalVolume2> <..>
với VolumeGroupName là tên chúng ta tự đặt cho VolumeGroup (mình lấy tên vol_gr_total cho dễ nhớ)
sudo vgcreate vol_gr_total /dev/sdb1 /dev/sdc1 /dev/sdd1sudo vgdisplay
**
1.3.5 Tạo LogicalVolume phân bổ lại dung lượng
Theo yêu cầu bài toán, ta sẽ dựa trên 3 ổ đĩa vật lí có dung lượng 2GB, 3GB, 5GB tạo ra 2 ổ đĩa luận lí có dung lượng 4GB và 6GB. Để thực hiện, ta sẽ dùng lệnh lvcreate định nghĩa 2 LogicalVolume và dùng lệnh lvdisplay để kiểm tra kết quả. Cú pháp:
lvcreate -L <Capacity> -n <LogicalVolumeName> <GroupVolumeName>
Với các thành phần:
- Option "-L" chỉ định dung lượng cho LogicalVolume cần tạo
- Option "-n" chỉ định tên cho LogicalVolume cần tạo
- Capacity: dung lượng của LogicalVolume cần tạo.
Dùng 2 câu lệnh sau để tạo 2 LogicalVolume có dung lượng lần lượt là 4GB và 6GB:
lvcreate -L 4G -n log_vol_4GB vol_gr_totallvcreate -l 100%FREE -n log_vol_6GB vol_gr_total lvdisplay
Ở câu lệnh thứ 2, chúng ta hãy chú ý đên một Option hữu dụng là "-l 100%FREE" (lờ nhỏ). Sau khi câu lệnh đầu tiên lấy đi 4GB dung lượng cho LogicalVolume log_vol_4GB, ta sẽ dùng Option này với ý nghĩa "lấy toàn bộ dung lượng trống còn lại trong VolumeGroup để tạo LogicalVolume tiếp theo"
Sử dụng lệnh lvdisplay, ta sẽ nhận được nội dung tương tự như sau:--- Logical volume --- LV Path /dev/vol_gr_total/log_vol_4GB LV Name log_vol_4GB VG Name vol_gr_total LV UUID 1QY8Wh-RaNX-tfXd-1sxZ-ehRf-1cKk-bniDIW LV Write Access read/write LV Creation host, time localhost.localdomain, 2021-12-12 19:02:02 +0700 LV Status available # open 0 LV Size 4.00 GiB Current LE 1024 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0 --- Logical volume --- LV Path /dev/vol_gr_total/log_vol_6GB LV Name log_vol_6GB VG Name vol_gr_total LV UUID 9gn524-iUog-YFBZ-s0hU-ZQPr-xns8-faPMpA LV Write Access read/write LV Creation host, time localhost.localdomain, 2021-12-12 19:02:20 +0700 LV Status available # open 0 LV Size <5.99 GiB Current LE 1533 Segments 3 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:1
**
1.3.6 Định dạng LogicalVolume
Tương tự như định dạng phân vùng của một ổ đĩa vật lí, ta dùng lệnh mkfs để định dạng ext4 cho LogicalVolume với cú pháp đường dẫn sau:
mkfs -t ext4 /dev/<VolumeGroupName>/<LogicalVolumeName>
Với dev/<VolumeGroupName>/<LogicalVolumeName> là đường dẫn đến LogicalVolume. Đến bước này thì chúng ta cần phải đăng nhập vào tài khoản root để thực hiện câu lệnh:
su root
Trong bài Lab trước, mình đã hướng dẫn đặt pass cho cả tài khoản Root lẫn tài khoản thường ngay khi cài đặt CentOS. Nếu bạn chưa từng đăng nhập hay đặt pass cho tải khoản root thì ta sẽ tiến hành đăng nhập và đặt pass luôn:
su root # Đăng nhập tk Root passwd # Set password cho tk Root
Khi đã ở tài khoản root, ta bắt đầu chạy lệnh định dạng LogicalVolume, lúc này thì không cần sudo nữa, vì chúng ta đang đứng trên tài khoản có quyền tối cao với hệ thống rồi:
mkfs -t ext4 /dev/vol_gr_total/log_vol_4G mkfs -t ext4 /dev/vol_gr_total/log_vol_6G lsblk
**
1.3.7 Cấu hình fstab
Hiện giờ chúng ta đã có 2 LogicalVolume với dung lượng 4GB và 6GB rồi, nhưng thay vì dùng câu lệnh mount như ví dụ ở phần trước, chúng ta sẽ phải cấu hình file /etc/fstab để hệ thống CentOS tự động mount 2 phân vùng này vào hệ thống thư mục.
Việc tự động mount này là rất quan trọng, ví dụ như ta dùng phân vùng 4GB cho dịch vụ DatabaseServer chẳng hạn, thì dịch vụ không thể đợi chúng ta mount thủ công phân vùng nó sử dụng sau mỗi lần khởi động được, mọi việc cần được tự động hóa ở mức tối đa có thể.
Vẫn đứng trên root user, ta thực hiện câu lệnh sau:
echo "" >> /etc/fstab # Chèn thêm 1 dòng trốngecho "/dev/vol_gr_total/log_vol_4GB /mnt/log_vol_4GB_mp/ ext4 defaults 0 0" >> /etc/fstabecho "/dev/vol_gr_total/log_vol_6GB /mnt/log_vol_6GB_mp/ ext4 defaults 0 0" >> /etc/fstab
Câu lệnh gồm 2 phần trước và sau kí tự chuyển hướng dòng lệnh ">>" (2 dấu lớn hơn). Ý nghĩa câu lệnh như sau:
- echo "<nội dung>" : xuất nội dung trong dấu ngoặc kép ra màn hình.
- Kí tự chuyển hướng dòng lệnh ">>" : sẽ lái hướng cho kết quả của lệnh echo vào mục tiêu là tệp /etc/fstab thay vì xuất ra màn hình.
Và ta sẽ xem nội dung file /etc/fstab để hiểu thêm về công dụng của câu lệnh trên:
Nội dung mà ta ghi vào file /etc/fstab là cấu hình để hệ thống biết được vị trí và định dạng của phân vùng cần mount khi khởi động với cú pháp:
<đường dẫn đến LogicalVolume> <MountPoint: cần mount vào đâu> <Format: định dạng gì> defaults 0 0
Cuối cùng là khởi động lại hệ thống và xem kết quả bằng lệnh lsblk.
**
II Thực hiện bài toán
2.1 Tạo Script thực thi tự động
Từ các câu lệnh trên, ta xây dựng Script với nội dung sau. lưu ý là ta sẽ đứng trên tài khoản root để tạo và chạy script này:
# Cho 3 Physical Disk 2GB, 3GB, 5GB# Yeu cau phan chia thanh 2 Logical Volume 4GB va 6GB # Format Disks echo "*** Format Disks ***" lsblk fdisk /dev/sdb lsblk fdisk /dev/sdc lsblk fdisk /dev/sdd lsblk # Format Partitions echo "*** Format Partitions ***" mkfs -t ext4 /dev/sdb1 mkfs -t ext4 /dev/sdc1 mkfs -t ext4 /dev/sdd1 lsblk | grep part # Create Physical Volume echo "*** Create Physical Volume ***" pvcreate /dev/sdb1 pvdisplay pvcreate /dev/sdc1 pvdisplay pvcreate /dev/sdd1 pvdisplay # Create Volume Group from Physical Volume echo "*** Create Volume Group ***" vgcreate vol_gr_total /dev/sdb1 /dev/sdc1 /dev/sdd1 vgdisplay # Create Logical Volume from Volume Group echo "*** Create Logical Volume ***" lvcreate -L 4G -n log_vol_4GB vol_gr_total lvcreate -n log_vol_6GB -l 100%FREE vol_gr_total lvdisplay # Format Logical Volume echo "*** Format Logical Volume ***" mkfs -t ext4 /dev/vol_gr_total/log_vol_4GB mkfs -t ext4 /dev/vol_gr_total/log_vol_6GB lsblk # Edit /etc/fstab for automount Logical Volume when system booting echo "" >> /etc/fstab echo "/dev/vol_gr_total/log_vol_4GB /mnt/log_vol_4GB_mp/ ext4 defaults 0 0" >> /etc/fstab echo "/dev/vol_gr_total/log_vol_6GB /mnt/log_vol_6GB_mp/ ext4 defaults 0 0" >> /etc/fstab echo "*** Configure /etc/fstab for auto-mount Logical Volume done ***"init 6
**
2.2 Kiểm tra kết quả
Ta sẽ xem lại BlockDevice trước khi phân chia LogicalVolumes bằng câu lệnh lsblk:
Sau khi chạy thành công Script và chưa khởi động lại máy ảo, sử dụng lệnh ls -la /mnt và lsblk ta sẽ thấy 2 LogicalVolume vừa tạo vẫn chưa được mount vào thư mục /mnt:
Sau khi khởi động lại máy ảo, ta thấy 2 LogicalVolume có dung lượng 4GB và 6GB đã được mount vào thư mục /mnt. Như vậy, chúng ta đã thành công cấu hình file /etc/fstab để hệ thống CentOS tự động mount 2 LogicalVolume trong quá trình khởi động.
Trong trường hợp này, dung lượng 6GB của ổ đĩa luận lí đã được gom từ cả 3 ổ đĩa vật lí có dung lượng không quá 5GB.
**
lvextend -L +2G /dev/vol_gr_total/log_vol_4GB resize2fs /dev/vol_gr_total/log_vol_4GB
resize2fs /dev/vol_gr_total/log_vol_3GB <desired size>
lvreduce -L <desired size> /dev/vol_gr_total/log_vol_3GB
**


Nhận xét
Đăng nhận xét