Gần đây, do nhu cầu công việc nên tôi cần thử nghiệm dựng Node trên server của Hetzner. Tôi tìm thấy có con EX130-S là có storage lớn (Trên 3TB) phù hợp với công việc, còn CPU với RAM thì quá khủng rồi. Nhưng server được tạo thì mỗi ổ đĩa lại phân làm 2 phân vùng lớn là 2TB và 1.5TB, trong khi tôi cần một phân vùng lớn hơn 3T. Do đó tôi cần phải gộp hai phân vùng này thành 1 phân vùng để có thể sử dụng.
Tôi đã tìm thấy bài viết How to Resize and Move Partitions in Linux, trong đó có phần Command-Line Tools có vẻ phù hợp với nhu yêu cầu của tôi, và có vẻ của tôi đơn giản hơn khá nhiều so với hướng dẫn khá nhiều. Ngoài ra bạn phải xem bài viết HOWTO MODIFY EXISTING SOFTWARE RAID 1 IN LINUX (MD) để thao tác với Raid.
Mục lục
Hướng dẫn gộp 2 phân vùng RAID1 liên tiếp trên Linux / Ubuntu sử dụng dòng lệnh
Chú ý: Tất cả các lệnh dưới đều phải thực hiện ở quyền root, các phân vùng đều chưa có dữ liệu. Và đây là thao tác rất nguy hiểm, vì thế quá trình thực hiện phải hết sức cẩn thận.
Các bước thực hiện merge hai phân vùng này lại như sau:
B1: Dùng lệnh lsblk để xem thông tin các Storage
Dùng lệnh lsblk để xem thông tin các ổ đĩa:
lsblk
-------------------------------------------------
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 3.5T 0 disk
├─nvme0n1p1 259:1 0 256M 0 part
├─nvme0n1p2 259:2 0 4G 0 part
│ └─md0 9:0 0 4G 0 raid1
├─nvme0n1p3 259:3 0 1G 0 part
│ └─md1 9:1 0 1022M 0 raid1 /boot
├─nvme0n1p4 259:4 0 2T 0 part
│ └─md2 9:2 0 2T 0 raid1 /
└─nvme0n1p5 259:5 0 1.5T 0 part
└─md3 9:3 0 1.5T 0 raid1 /home
nvme1n1 259:6 0 3.5T 0 disk
├─nvme1n1p1 259:7 0 256M 0 part /boot/efi
├─nvme1n1p2 259:8 0 4G 0 part
│ └─md0 9:0 0 4G 0 raid1
├─nvme1n1p3 259:9 0 1G 0 part
│ └─md1 9:1 0 1022M 0 raid1 /boot
├─nvme1n1p4 259:10 0 2T 0 part
│ └─md2 9:2 0 2T 0 raid1 /
└─nvme1n1p5 259:11 0 1.5T 0 part
└─md3 9:3 0 1.5T 0 raid1 /home
Bây giờ ta sẽ thực hiện merge hai phân vùng md2 và md3 trên ổ nvme1n1 thành 1 phân vùng có dung lượng lớn hơn.
B2: Dùng sfdisk để kiểm tra trạng thái ban đầu các phân vùng
Bây giờ chúng ta sử dụng lệnh r để kiểm tra trạng thái ban đầu của các phân vùng, nên chạy lệnh này nhiều lần vì nó xác minh tính toàn vẹn cuẩ các phân vùng:
sfdisk -Vl /dev/nvme1n1
-------------------------------------------------
Disk /dev/nvme1n1: 3.49 TiB, 3840755982336 bytes, 7501476528 sectors
Disk model: SAMSUNG MZQL23T8HCLS-00A07
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 131072 bytes / 131072 bytes
Disklabel type: gpt
Disk identifier: DE2FE573-B176-468A-88A5-A78C9FA9F7E1
Device Start End Sectors Size Type
/dev/nvme1n1p1 4096 528383 524288 256M EFI System
/dev/nvme1n1p2 528384 8916991 8388608 4G Linux RAID
/dev/nvme1n1p3 8916992 11014143 2097152 1G Linux RAID
/dev/nvme1n1p4 11014144 4234678271 4223664128 2T Linux RAID
/dev/nvme1n1p5 4234678272 7501476494 3266798223 1.5T Linux RAID
No errors detected.
Header version: 1.0
Using 5 out of 128 partitions.
A total of 4062 free sectors is available in 1 segment.
Đặc biệt, chúng ta phải chú ý đến kích thước của các phân vùng.
B3: Liệt kê các UUID của các phân vùng
UUID của các phân vùng phải giữ nguyên để giữ cho hệ thống có khả năng khởi động:
blkid /dev/nvme1n1*
-------------------------------------------
/dev/nvme1n1: PTUUID="de2fe573-b176-468a-88a5-a78c9fa9f7e1" PTTYPE="gpt"
/dev/nvme1n1p1: SEC_TYPE="msdos" UUID="B368-344D" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="db155d19-ec7c-46c5-9cd6-698aa39e777e"
/dev/nvme1n1p2: UUID="7e210d2b-0a2d-631e-b1fd-b01bd885c01c" UUID_SUB="41e2d39b-0997-235a-ce49-df65d4c48631" LABEL="rescue:0" TYPE="linux_raid_member" PARTUUID="7f47bd0b-784b-4b0d-aabb-35549b444cd9"
/dev/nvme1n1p3: UUID="f106c64d-bf13-5c87-43cc-3e2ff7e0cbe7" UUID_SUB="f9e34bb2-291e-e5fa-9064-f0d373351815" LABEL="rescue:1" TYPE="linux_raid_member" PARTUUID="df37e728-d560-4a76-9975-bde801fa3933"
/dev/nvme1n1p4: UUID="14321604-f09f-6c59-7b91-8ccd2fd7d157" UUID_SUB="2b8edd53-797d-328c-cf90-68f57f216e6d" LABEL="rescue:2" TYPE="linux_raid_member" PARTUUID="b37eab9c-7b0e-4056-b977-a5a013eda071"
/dev/nvme1n1p5: UUID="795cb1dd-4559-d34a-f716-413780e1e5ba" UUID_SUB="5826df5b-1b81-b4e0-ff1c-3320ac424fe8" LABEL="rescue:3" TYPE="linux_raid_member" PARTUUID="fab7547d-b0f4-4280-8c4f-96cb5998ad8b"
B4: Xóa phân vùng cuối cùng /dev/nvme1n1p5
Chúng ta dùng lệnh fdisk để xóa phân vùng cuối cùng:
fdisk /dev/nvme1n1
-------------------------------------------
Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.
Command (m for help): d
Partition number (1-5, default 5): 5
Partition 5 has been deleted.
Command (m for help): w
The partition table has been altered.
Syncing disks.
B5: Mở rộng phân vùng /dev/nvme1n1p4
Sử dụng growpart để mở rộng một phân vùng (thường là phân vùng cuối cùng) nhằm lấp đầy không gian có sẵn:
growpart /dev/nvme1n1 4
-----------------------------------------
NOCHANGE: partition 4 is size 7490462351. it cannot be grown
B6: Kiểm tra lại thông tin
Chúng ta sẽ kiểm tra lại bằng lệnh sau xem phân vùng đã được mở rộng chưa:
sfdisk -Vl /dev/nvme1n1
------------------------------------------
Disk /dev/nvme1n1: 3.49 TiB, 3840755982336 bytes, 7501476528 sectors
Disk model: SAMSUNG MZQL23T8HCLS-00A07
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 131072 bytes / 131072 bytes
Disklabel type: gpt
Disk identifier: DE2FE573-B176-468A-88A5-A78C9FA9F7E1
Device Start End Sectors Size Type
/dev/nvme1n1p1 4096 528383 524288 256M EFI System
/dev/nvme1n1p2 528384 8916991 8388608 4G Linux RAID
/dev/nvme1n1p3 8916992 11014143 2097152 1G Linux RAID
/dev/nvme1n1p4 11014144 7501476494 7490462351 3.5T Linux RAID
No errors detected.
Header version: 1.0
Using 4 out of 128 partitions.
A total of 4062 free sectors is available in 1 segment.
Kiểm tra lại UUID có bị thay đổi không:
blkid /dev/nvme1n1*
-------------------------------------------------
/dev/nvme1n1: PTUUID="de2fe573-b176-468a-88a5-a78c9fa9f7e1" PTTYPE="gpt"
/dev/nvme1n1p1: SEC_TYPE="msdos" UUID="B368-344D" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="db155d19-ec7c-46c5-9cd6-698aa39e777e"
/dev/nvme1n1p2: UUID="7e210d2b-0a2d-631e-b1fd-b01bd885c01c" UUID_SUB="41e2d39b-0997-235a-ce49-df65d4c48631" LABEL="rescue:0" TYPE="linux_raid_member" PARTUUID="7f47bd0b-784b-4b0d-aabb-35549b444cd9"
/dev/nvme1n1p3: UUID="f106c64d-bf13-5c87-43cc-3e2ff7e0cbe7" UUID_SUB="f9e34bb2-291e-e5fa-9064-f0d373351815" LABEL="rescue:1" TYPE="linux_raid_member" PARTUUID="df37e728-d560-4a76-9975-bde801fa3933"
/dev/nvme1n1p4: UUID="14321604-f09f-6c59-7b91-8ccd2fd7d157" UUID_SUB="2b8edd53-797d-328c-cf90-68f57f216e6d" LABEL="rescue:2" TYPE="linux_raid_member"
/dev/nvme1n1p5: UUID="795cb1dd-4559-d34a-f716-413780e1e5ba" UUID_SUB="5826df5b-1b81-b4e0-ff1c-3320ac424fe8" LABEL="rescue:3" TYPE="linux_raid_member"
B7: Thực hiện tương tự với nvme0n1
Do hiện tại hệ thống đang sử dụng RAID1, tức là hai ổ giống nhau, lưu dữ liệu trên đồng thời hai ổ cứng. Kiểu này đảm bảo an toàn dữ liệu nhưng tốc độ ghi sẽ chậm hơn.
blkid /dev/nvme0n1*
------------------------------------
/dev/nvme0n1: PTUUID="f50cc47c-f71b-4eca-8870-209ab943e3f4" PTTYPE="gpt"
/dev/nvme0n1p1: SEC_TYPE="msdos" UUID="B368-344D" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="c530e786-e659-4fe5-9a4b-2caebe033288"
/dev/nvme0n1p2: UUID="7e210d2b-0a2d-631e-b1fd-b01bd885c01c" UUID_SUB="e2b28a21-6372-a8fa-c687-9a56d342ee18" LABEL="rescue:0" TYPE="linux_raid_member" PARTUUID="9e8f7eec-0fe8-46f5-a7d4-5676beda4f3c"
/dev/nvme0n1p3: UUID="f106c64d-bf13-5c87-43cc-3e2ff7e0cbe7" UUID_SUB="18da4351-9039-ca9f-b74e-e190d3b6f70b" LABEL="rescue:1" TYPE="linux_raid_member" PARTUUID="500adcc2-526a-432d-baf0-dea754b8d0bf"
/dev/nvme0n1p4: UUID="14321604-f09f-6c59-7b91-8ccd2fd7d157" UUID_SUB="04c078f4-d2fb-6994-bf21-dcf8fe1cc8a0" LABEL="rescue:2" TYPE="linux_raid_member"
/dev/nvme0n1p5: UUID="795cb1dd-4559-d34a-f716-413780e1e5ba" UUID_SUB="fe6bf0d8-8fe8-70f2-5261-61bd6ee004c6" LABEL="rescue:3" TYPE="linux_raid_member"
fdisk /dev/nvme0n1
growpart /dev/nvme0n1 4
B8: Cập nhật tệp fstab bỏ cấu hình md3
Mở tệp /etc/fstab, comment dòng cấu hình liên quan tới md3 (/dev/md3/3), như trong file là dòng cuối cùng:
proc /proc proc defaults 0 0
# efi-boot-partiton
UUID=B368-344D /boot/efi vfat umask=0077 0 1
# /dev/md/0
UUID=2e42229e-7f6b-4d1a-a2e7-7799b3508c5b none swap sw 0 0
# /dev/md/1
UUID=f1c5749d-ae87-445a-bfbc-0c225d4dba98 /boot ext3 defaults 0 0
# /dev/md/2
UUID=e30d0991-aadd-489e-8098-196d5eeb0fe7 / ext4 defaults 0 0
# /dev/md/3
# UUID=3fb5dc02-2245-4f82-8b17-04c6520a0051 /home ext4 defaults 0 0
B9: Restart lại server và kiểm tra thông tin
Bây giờ chúng ta restart lại server bằng lệnh sau:
reboot now
Sau khi khởi động server xong không vào lại được SSH nữa, nên đành nhờ support bên Hetzner. Bên Hetzner kết nối server tới KVM Console trong vòng 3 giờ để tự kiểm tra và gửi Tài liệu sử dụng KVM Console. Sử dụng thấy KVM Console bọn Hetzner này chậm, xấu, đánh kí tự rất lác và bị lặp kí tự không thể nào đánh lệnh được, toàn phải dùng tính năng “Send text to target” thì mới được.
Sau khi kiểm tra không phải vấn đề do Storage mà do service SSH không được cấu hình để tự động chạy. Thực hiện bật lại bằng lệnh:
# Cấu hình tự động chạy SSH trên Hetzner
systemctl enable ssh
# Một số máy khác có thể dùng lệnh sau
systemctl enable sshd
Xem lại thông tin Storage sẽ thấy như sau:
lsblk
---------------------------------------
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 3.5T 0 disk
├─nvme0n1p1 259:2 0 256M 0 part
├─nvme0n1p2 259:3 0 4G 0 part
│ └─md0 9:0 0 4G 0 raid1 [SWAP]
├─nvme0n1p3 259:4 0 1G 0 part
│ └─md1 9:1 0 1022M 0 raid1 /boot
└─nvme0n1p4 259:5 0 3.5T 0 part
└─md2 9:2 0 2T 0 raid1 /
nvme1n1 259:1 0 3.5T 0 disk
├─nvme1n1p1 259:6 0 256M 0 part /boot/efi
├─nvme1n1p2 259:7 0 4G 0 part
│ └─md0 9:0 0 4G 0 raid1 [SWAP]
├─nvme1n1p3 259:8 0 1G 0 part
│ └─md1 9:1 0 1022M 0 raid1 /boot
└─nvme1n1p4 259:9 0 3.5T 0 part
└─md2 9:2 0 2T 0 raid1 /
Hiện tại phân vùng nvme0n1p4 / nvme1n1p4 đã ăn dung lượng mới, nhưng md2 thì vẫn chưa.
B10: Tăng dung lượng cho ổ RAID1 /dev/md2
Sau khi đọc hướng dẫn từ HOWTO MODIFY EXISTING SOFTWARE RAID 1 IN LINUX (MD), nói thật nhìn khá rối và phức tạp. Sau đó Google thêm, cuối cùng tôi đã tìm giải pháp bằng 2 lệnh đơn giản dưới:
// Cập nhật dung lượng vào ổ RAID1
mdadm --grow /dev/md2 --size=max
// Kiểm tra thông tin thấy đã cập nhật
lsblk
------------------------------------------
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 3.5T 0 disk
├─nvme0n1p1 259:2 0 256M 0 part /boot/efi
├─nvme0n1p2 259:3 0 4G 0 part
│ └─md0 9:0 0 4G 0 raid1 [SWAP]
├─nvme0n1p3 259:4 0 1G 0 part
│ └─md1 9:1 0 1022M 0 raid1 /boot
└─nvme0n1p4 259:5 0 3.5T 0 part
└─md2 9:2 0 3.5T 0 raid1 /
nvme1n1 259:1 0 3.5T 0 disk
├─nvme1n1p1 259:6 0 256M 0 part
├─nvme1n1p2 259:7 0 4G 0 part
│ └─md0 9:0 0 4G 0 raid1 [SWAP]
├─nvme1n1p3 259:8 0 1G 0 part
│ └─md1 9:1 0 1022M 0 raid1 /boot
└─nvme1n1p4 259:9 0 3.5T 0 part
└─md2 9:2 0 3.5T 0 raid1 /
# Cập nhật dung lượng trên Hệ điều hành
resize2fs /dev/md2
# Kiểm tra lại dung lượng
------------------------------------------
df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 13G 1.7M 13G 1% /run
/dev/md2 3.5T 2.1G 3.3T 3% /
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/md1 989M 255M 684M 28% /boot
/dev/nvme0n1p1 256M 316K 256M 1% /boot/efi
tmpfs 13G 0 13G 0% /run/user/0
Đến đây chúng ta đã hoàn thành, chúng ta đã có ổ RAID1 mới với dung lượng là 3.5T.
Một số vấn đề với server Hetzner
Không thể vào SSH sau khi restart server
Sau khi khởi động server xong không vào lại được SSH nữa, nên đành nhờ support bên Hetzner. Bên Hetzner kết nối server tới KVM Console trong vòng 3 giờ để tự kiểm tra và gửi cho Tài liệu sử dụng KVM Console để tìm hiểu. Sử dụng thấy KVM Console bọn Hetzner này chậm, xấu, đánh kí tự rất lác và bị lặp kí tự không thể nào đánh lệnh được, toàn phải dùng tính năng “Send text to target” thì mới được.
Sau khi kiểm tra không phải vấn đề do Storage mà do service SSH không được cấu hình để tự động chạy. Thực hiện bật lại bằng lệnh:
# Cấu hình tự động chạy SSH trên Hetzner
systemctl enable ssh
# Một số máy khác có thể dùng lệnh sau
systemctl enable sshd
Không truy cập được mạng khi cấu hình Firewall cho phần Incoming
Mặc định server Hetzner khi bàn giao cho mình thi không chặn gì, tức mở tất cả. Đây là rủi ro rất lớn về vấn đề bảo mật, trước khi sử dụng bạn cần phải cấu hình Firewall trên giao diện Dashboard của nó. Để cập nhật Rule cho Firewall, bạn vào link https://robot.hetzner.com/server, chọn server cần cập nhật, sau đó chọn mục Firewall.
Tôi vẫn để phần Rules (Outgoing) như cũ (Tức là cho: ALLOW ALL), phần Rules (Imcoming) chỉ mở cho truy cập từ các địa chỉ cần thiết, kết quả là server gặp lỗi không thể truy cập được các link HTTP/HTTPS.
Sau khi hỏi Google liên quan tới server của Hetzner, tôi đã tìm được giải pháp, đó là phải thêm 2 rule DNS và HTTP như ảnh dưới. Chúng ta quan tâm một số Rule:
- Rule #1: Lý thuyết để có thể ping được tới server, nhưng thực tế chưa ping được
- Rule #2: Rule này để từ server có thể phân giải được tên miền ra các IP
- Rule #3: Rule này để mở một số kết nối ra ngoài:
- Port 80, 443: Để có thể truy cập được vào các Website.
- Port 22: Để có thể kết nối tới các dịch vụ Git như Gitlab, BitBucket, Github,…
- Rule #4: Rule này để cho phép duy trì kết nối Socket.
1 Pingbacks