LapTrinhBlockchain

Chia sẻ kiến thức về Lập Trình Blockchain

Kiến thức phần mềm, Nâng cao Kiến thứ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 trên server Hetzner

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

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

Chia sẻ bài viết
5
(8)

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

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 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.
Xử lý vấn đề Firewall trên Hetzner

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 5 / 5. Số phiếu: 8

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Trả lời

Giao diện bởi Anders Norén