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 làm việc với RAID trên Ubuntu sử dụng command line

Hướng dẫn làm việc với RAID trên Ubuntu sử dụng command line

Hướng dẫn làm việc với RAID trên Ubuntu sử dụng command line

Chia sẻ bài viết
0
(0)

Dạo gần đây mình cần ổ logic với dung lượng lớn, trong khi ổ vật lý với dung lượng lớn thì đòi hỏi chi phí cao và dung lượng càng lớn thì càng hiếm và đắt. Giải pháp đặt ra là cần kết hợp nhiều ở cứng vật lý dụng lượng nhỏ thành ổ logic với dung lượng lớn. Và vì vậy mình tìm hiểu đến RAID và mình đã chọn RAID0 để làm điều này.

Do lần đầu tìm hiểu không thể tránh khỏi sai sót nên mình quyết định nghiên cứu và thử nghiệm trên một con EC2 EC2 t2.medium (2 CPU, 4G RAM) với 1 ổ chính 28G và thêm 2 ổ phụ mỗi ổ 30G. Mình sử dụng dịch vụ EC2 tiện hơn vì nếu có vấn đề gì sai, lỗi thì mình tạo lại cũng rất nhanh.

Mình chỉ triển khai trên server thật sau khi việc thử nghiệm ít nhất 2 lần okie.

Hướng dẫn tạo RAID1

Để thực hiện việc này, tôi đã tham khảo bài viết Hướng dẫn cấu hình RAID 1 trên CentOS, tôi thực hiện theo khá okie.

Để bắt đầu thử nghiệm, tôi tạo EC2 t2.medium (2 CPU, 4G RAM) với 1 ổ chính và thêm 2 ổ phụ để thử nghiệm RAID. Kiểm tra thông tin ổ đĩa bằng lệnh:

lsblk
------------------------------
NAME     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0      7:0    0 24.9M  1 loop /snap/amazon-ssm-agent/7628
loop1      7:1    0 55.7M  1 loop /snap/core18/2812
loop2      7:2    0 63.9M  1 loop /snap/core20/2182
loop3      7:3    0   87M  1 loop /snap/lxd/27037
loop4      7:4    0 40.4M  1 loop /snap/snapd/20671
xvda     202:0    0   28G  0 disk
├─xvda1  202:1    0 27.9G  0 part /
├─xvda14 202:14   0    4M  0 part
└─xvda15 202:15   0  106M  0 part /boot/efi
xvdb     202:16   0   30G  0 disk
xvdc     202:32   0   30G  0 disk

Như trên ta thấy xvda ổ chính chứa hệ điều hành, chúng ta có 2 ổ phụ là xvdb xvdc là hai ổ phụ cùng kích thước. Chúng ta sẽ sử dụng hai ổ phụ này để tạo RAID 1. Các bước thực hiện như sau:

* B1: Sử dụng fdisk để tạo phân vùng cho hai ổ phụ

Đầu tiên chúng ta tạo phân vùng cho ổ thứ nhất bằng lệnh dưới, nhớ chuyển sang tài khoản root để thực hiện:

# Nhập n -> p -> w
fdisk /dev/xvdb
-----------------------------
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.


Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-62914559, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62914559, default 62914559):

Created a new partition 1 of type 'Linux' and of size 30 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Làm tương tự với ổ còn lại:

fdisk /dev/xvdc
-------------------------------
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.


Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-62914559, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62914559, default 62914559):

Created a new partition 1 of type 'Linux' and of size 30 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Kiểm tra lại phân vùng:

lsblk
-------------------------------
NAME     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0      7:0    0 24.9M  1 loop /snap/amazon-ssm-agent/7628
loop1      7:1    0 55.7M  1 loop /snap/core18/2812
loop2      7:2    0 63.9M  1 loop /snap/core20/2182
loop3      7:3    0   87M  1 loop /snap/lxd/27037
loop4      7:4    0 40.4M  1 loop /snap/snapd/20671
xvda     202:0    0   28G  0 disk
├─xvda1  202:1    0 27.9G  0 part /
├─xvda14 202:14   0    4M  0 part
└─xvda15 202:15   0  106M  0 part /boot/efi
xvdb     202:16   0   30G  0 disk
└─xvdb1  202:17   0   30G  0 part
xvdc     202:32   0   30G  0 disk
└─xvdc1  202:33   0   30G  0 part

* B2: Tạo ổ RAID1 từ 2 ổ phụ trên

Bây giờ chúng ta tạo ổ md1 dạng RAID1 từ hai phân vùng xvdb1 xvdc1 vừa tạo ở trên. Lệnh như sau

mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/xvd[b-c]1
---------------------------------
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@ip-172-31-85-83:~# 

Sau đó ta kiểm tra lại:

lsblk
------------------------
NAME     MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
loop0      7:0    0 24.9M  1 loop  /snap/amazon-ssm-agent/7628
loop1      7:1    0 55.7M  1 loop  /snap/core18/2812
loop2      7:2    0 63.9M  1 loop  /snap/core20/2182
loop3      7:3    0   87M  1 loop  /snap/lxd/27037
loop4      7:4    0 40.4M  1 loop  /snap/snapd/20671
xvda     202:0    0   28G  0 disk
├─xvda1  202:1    0 27.9G  0 part  /
├─xvda14 202:14   0    4M  0 part
└─xvda15 202:15   0  106M  0 part  /boot/efi
xvdb     202:16   0   30G  0 disk
└─xvdb1  202:17   0   30G  0 part
  └─md1    9:1    0   30G  0 raid1
xvdc     202:32   0   30G  0 disk
└─xvdc1  202:33   0   30G  0 part
  └─md1    9:1    0   30G  0 raid1

Như vậy việc tạo đã thành công, giờ ta kiểm tra tiến trình sync đã hoàn thành chưa bằng lệnh:

cat /proc/mdstat
------------------------------
Personalities : [raid1]
md1 : active raid1 xvdc1[1] xvdb1[0]
      31438848 blocks super 1.2 [2/2] [UU]
      [===========>.........]  resync = 59.8% (18813184/31438848) finish=3.3min speed=62643K/sec

unused devices: <none>

Chúng ta chờ vài phút rồi kiểm tra lại, khi nào hoàn thành bạn sẽ thấy thông tin như dưới:

cat /proc/mdstat
-------------------------------
Personalities : [raid1]
md1 : active raid1 xvdc1[1] xvdb1[0]
      31438848 blocks super 1.2 [2/2] [UU]
mdadm --detail /dev/md1
-------------------------------
/dev/md1:
           Version : 1.2
     Creation Time : Mon Apr 15 04:11:19 2024
        Raid Level : raid1
        Array Size : 31438848 (29.98 GiB 32.19 GB)
     Used Dev Size : 31438848 (29.98 GiB 32.19 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Apr 15 04:19:41 2024
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : ip-172-31-85-83:1  (local to host ip-172-31-85-83)
              UUID : e5a05365:01be9d28:84880ace:7e734bd9
            Events : 17

    Number   Major   Minor   RaidDevice State
       0     202       17        0      active sync   /dev/xvdb1
       1     202       33        1      active sync   /dev/xvdc1

* B3: Tạo file hệ thống trên Raid1

Ta sử dụng lệnh sau để tạo file hệ thống:

mkfs.ext4 /dev/md1

-------------------------------
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 7859712 4k blocks and 1966080 inodes
Filesystem UUID: 918ce0b9-5e5f-4e24-904f-f91bda0c509b
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

* B4: Thực hiện mount ổ raid vào hệ thống

Chúng ta sử dụng lệnh sau để mount vào hệ thống:

mkdir /mnt/md1
mount /dev/md1 /mnt/md1

Kiểm tra lại xem mount thành công chưa:

df -h
---------------------------
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        27G  1.6G   26G   6% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           781M  884K  780M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/xvda15     105M  6.1M   99M   6% /boot/efi
tmpfs           391M  4.0K  391M   1% /run/user/1000
/dev/md1         30G   24K   28G   1% /mnt/md1

Nếu bạn muốn hệ thống tự động mount khi reboot thì chúng ta cần sửa tệp /ect/fstab và thêm dòng sau (Cái này tôi chưa test):

/dev/md1	/mnt/md1	ext4	noatime,rw	0	0

Để theo dõi trạng thái của ổ RAID ta đánh lệnh sau:

watch -n 2 cat /proc/mdstat
Lệnh theo dõi ổ RAID

Bây giờ chúng ta chuyển để thư mục /mnt/md1 và tạo thử một số dữ liệu!

Thực hiện chuyển từ RAID1 sang RAID0 mà không cần cài lại

Như trên, chúng ta đã tạo ổ RAID1 /dev/md1 từ hai phân vùng /dev/xvdb1/dev/xvdc1. Bây giờ chúng ta thực hiện chuyển ổ này sang RAID0.

Sau khi tìm kiếm thông tin trên mạng, đặc biệt từ bài viết Is it possible to convert RAID1 to RAID0 without system reinstalation?, tôi đã thực hiện thành công. Các bước thực hiện như sau:

* B1: Thực hiện loại bỏ 1 ổ ra khỏi RAID1

Bây giờ chúng ta loại bỏ phân vùng /dev/xvdc1 khỏi RAID1 bằng lệnh sau:

# Đầu tiên thiết lập phân vùng /dev/xvdc1
mdadm /dev/md1 --fail /dev/xvdc1
--------------------------
mdadm: set /dev/xvdc1 faulty in /dev/md1


# Loại bỏ phân vùng /dev/xvdc1 khỏi RAID1
mdadm /dev/md1 --remove /dev/xvdc1
--------------------------
mdadm: hot removed /dev/xvdc1 from /dev/md1

* B2: Chuyển từ RAID1 sang RAID0

Sử dụng lệnh sau để chuyển ổ /dev/md1 sang RAID0:

mdadm /dev/md1 --grow --level=0

* B3: Thêm phân vùng /dev/xvdc1 vào ổ /dev/md1

Thực hiện thêm ổ /dev/xvdc1 vào ổ RAID0:

mdadm --grow /dev/md1 --level=0 --raid-devices=2 --add /dev/xvdc1

Chúng ta kiểm tra bằng lệnh sau:

cat /proc/mdstat
-------------------------------
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md1 : active raid4 xvdc1[2] xvdb1[0]
      31438848 blocks super 1.2 level 4, 64k chunk, algorithm 5 [3/2] [U__]
      [>....................]  reshape =  4.6% (1447636/31438848) finish=15.7min speed=31647K/sec

unused devices: <none>

Như trên cần thời gian ~16 phút để hoàn thành reshape, thời gian phụ thuộc lượng dữ liệu có trong ổ.

Áp dụng chuyển từ RAID1 sang RAID0 cho bài toán thực tế

Thực tế mình đang chạy BaseNode sử dụng RAID1 (Mặc định tại thời điểm server bàn giao), nên tổng dung lượng phần cứng là 7TB nhưng thực tế do dùng RAID1 nên dung lượng sử dụng thực tế chỉ có 3.5TB. Hiện tại dung lượng sử dụng gần hết nên cần chuyển sang RAID0 để sử dụng tối đa dung lượng.

Thông tin ổ hiện tại như dưới:

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 /

Hai disk hiện tại chia làm 4 ổ logic đều là RAID1 trong đó có 1 ổ sử dụng cho khởi động, 1 ổ cho swap và một ổ cho OS, còn lại sử dụng lưu trữ dữ liệu. Đây là điểm khác biệt lớn so với thử nghiệm ở phần trên, hai ổ thử nghiệm hoàn toàn độc lập và ko dính dáng gì tới hệ điều hành.

Và khi áp dụng các thao tác trên thì không thành công. Cuối cùng khởi động qua hệ điều hành tạm để sử dụng thì hỏng luông hệ điều hành cũ. Cuối cùng đặt phải cài đặt lại từ đầu.

Có thể bạn quan tâm: 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

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 0 / 5. Số phiếu: 0

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