HƯỚNG DẪN Quản lý RAID với mdadm trên Ubuntu 16.04

Thảo luận trong 'KIẾN THỨC VPS/SERVER' bắt đầu bởi quyet1990, 26/10/16.

  1. quyet1990

    quyet1990 New Member

    Tham gia ngày:
    22/10/16
    Bài viết:
    220
    Đã được thích:
    0
    Giới thiệu
    RAID array cung cấp tăng hiệu suất và dự phòng bằng cách kết hợp ổ đĩa cá nhân (individual disks) vào các thiết bị lưu trữ ảo trong các cấu hình cụ thể. Trong Linux, tiện ích mdadm giúp dễ dàng để tạo và quản lý RAID array.
    Trong một hướng dẫn trước, chúng ta đã làm thế nào để tạo ra RAID array với mdadm trên Ubuntu 16.04. Trong hướng dẫn này, chúng tôi sẽ hướng dẫn làm thế nào để quản lý RAID array trên một máy chủ Ubuntu 16.04.

    Điều kiện tiên quyết
    Để hoàn thành hướng dẫn này, bạn sẽ cần truy cập vào một người dùng không phải root sử dụng lệnh sudo.
    Như đã đề cập ở trên, hướng dẫn này sẽ bao gồm quản lý mảng RAID.

    Truy vấn cho thông tin về thiết bị RAID
    Một trong những yêu cầu thiết yếu nhất cho quản lý là khả năng tìm kiếm thông tin về cấu trúc, thiết bị thành phần, và trạng thái hiện tại của array.
    Để có được thông tin chi tiết về một thiết bị RAID, sử dụng câu lệnh sau:
    Mã:
    sudo mdadm -D /dev/md0
    Các thông tin quan trọng về array sẽ được hiển thị:
    Mã:
    
    Output
    /dev/md0:
            Version : 1.2
      Creation Time : Mon Aug  8 21:19:06 2016
         Raid Level : raid10
         Array Size : 209584128 (199.88 GiB 214.61 GB)
      Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
       Raid Devices : 4
      Total Devices : 4
        Persistence : Superblock is persistent
    
        Update Time : Mon Aug  8 21:36:36 2016
              State : active
    Active Devices : 4
    Working Devices : 4
    Failed Devices : 0
      Spare Devices : 0
    
             Layout : near=2
         Chunk Size : 512K
    
               Name : mdadmwrite:0  (local to host mdadmwrite)
               UUID : 0dc2e687:1dfe70ac:d440b2ac:5828d61d
             Events : 18
    
        Number   Major   Minor   RaidDevice State
           0       8        0         0      active sync set-A   /dev/sda
           1       8       16        1      active sync set-B   /dev/sdb
           2       8       32        2      active sync set-A   /dev/sdc
           3       8       48        3      active sync set-B   /dev/sdd
    
    Từ quan điểm này, bạn có thể thấy cấp độ RAID, kích thước array, tình trạng của các phần riêng lẻ, các UUID của array, và các thiết bị thành phần và vai trò của chúng. Các thông tin được cung cấp trong chế độ xem này là tương đối tốt.
    Để có được thông tin chi tiết rút ngắn cho một array, phù hợp cho việc thêm vào tập tin /dev/mdadm/mdadm.conf, bạn có thể sử dụng lệnh sau:
    Mã:
    sudo mdadm -Db /dev/md0
    Mã:
    Output
    ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=0dc2e687:1dfe70ac:d440b2ac:5828d61d
    
    Để có được một bản tóm tắt mà người dùng có thể đọc được nhanh chóng của một thiết bị RAID, sử dụng lệnh sau:
    Mã:
    sudo mdadm -Q /dev/md0
    Mã:
    Output
    /dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.
    Điều này có thể được sử dụng để tìm các thông tin quan trọng về một thiết bị RAID trong nháy mắt.

    Lấy thông tin về Component Devices
    Bạn cũng có thể sử dụng mdadm để truy vấn các thiết bị thành phần cá nhân.
    Sử dụng tùy chọn -Q, câu lệnh như sau:
    Mã:
    sudo mdadm -Q /dev/sdc
    Mã:
    Output
    /dev/sdc: is not an md array
    /dev/sdc: device 2 in 4 device active raid10 /dev/md0. Use mdadm --examine for more detail.
    Bạn có thể nhận được thông tin chi tiết hơn bằng cách sử dụng tùy chọn -E hoặc --examine:
    Mã:
    sudo mdadm -E /dev/sdc
    Mã:
    Output
    /dev/sdc:
              Magic : a92b4efc
            Version : 1.2
        Feature Map : 0x0
         Array UUID : 0dc2e687:1dfe70ac:d440b2ac:5828d61d
               Name : mdadmwrite:0  (local to host mdadmwrite)
      Creation Time : Mon Aug  8 21:19:06 2016
         Raid Level : raid10
       Raid Devices : 4
    
    Avail Dev Size : 209584128 (99.94 GiB 107.31 GB)
         Array Size : 209584128 (199.88 GiB 214.61 GB)
        Data Offset : 131072 sectors
       Super Offset : 8 sectors
       Unused Space : before=130984 sectors, after=0 sectors
              State : active
        Device UUID : b0676ef0:73046e93:9d9c7bde:c80352bb
    
        Update Time : Mon Aug  8 21:36:36 2016
      Bad Block Log : 512 entries available at offset 72 sectors
           Checksum : 8be1be96 - correct
             Events : 18
    
             Layout : near=2
         Chunk Size : 512K
    
       Device Role : Active device 2
       Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
    
    Thông tin này cũng tương tự như được hiển thị khi sử dụng tùy chọn -D với array device, nhưng tập trung vào mối quan hệ của các thiết bị thành phần tới array.


    Đọc thông tin /proc/mdstat
    Để có được thông tin chi tiết về mỗi array lắp ráp (assembling) trên máy chủ của bạn, kiểm tra các tập tin /proc/mdstat. Đây thường là cách tốt nhất để tìm thấy trạng thái hiện tại của các array hoạt động trên hệ thống của bạn:
    Mã:
    cat /proc/mdstat
    Mã:
    Output
    Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
    md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
    209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
    
    unused devices: <none>
    Kết quả hiển thị ở đây là khá dày đặc, cung cấp rất nhiều thông tin trong một lượng nhỏ không gian.
    Mã:
    Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
    …
    
    Dòng Personalities mô tả các cấp độ RAID khác nhau và cấu hình các hạt nhân hiện đang hỗ trợ.
    Các dòng bắt đầu bằng md0 diễn tả sự bắt đầu của một miêu tả thiết bị RAID.

    Mã:
    . . .
    md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
    . . .
    
    Dòng trạng tháu đầu tiền cho biết array đang hoạt động (không bị lỗi) và cấu hình RAID 10. Sau đó, các thiết bị thành phần được sử dụng để xây dựng các array được liệt kê. Các con số trong ngoặc mô tả "vai trò" hiện tại của thiết bị trong array.
    Mã:
    . . .
    209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
    . . .
    
    Dòng thứ hai hiển thị trong ví dụ này cho biết số block các thiết bị ảo cung cấp, phiên bản siêu dữ liệu (metadata) (1.2 trong ví dụ này), và kích thước đoạn của array. Do đây là một RAID 10 array, nó cũng bao gồm thông tin về cách bố trí của mảng (ví dụ này đã được cấu hình để lưu trữ hai bản sao của từng đoạn dữ liệu)

    Số đầu tiên trong khung số chỉ ra kích thước của một array ổn định trong khi số thứ hai đại diện cho số các thiết bị hiện có. Các khung khác là một dấu hiệu cho thấy hình ảnh của tình trạng array, với "U" đại diện cho các thiết bị ổn định và "_" đại diện cho các thiết bị bị lỗi.

    Nếu array của bạn hiện đang lắp ráp (assembling) hoặc phục hồi, bạn có thể có một dòng khác cho thấy quá trình. Nó sẽ giống như thế này:

    Mã:
    . . .
    [>....................] resync = 0.9% (2032768/209584128) finish=15.3min speed=225863K/sec
    . . .
    
    Đây này mô tả các hoạt động hiện đang được áp dụng và tiến độ hiện tại trong một số cách khác nhau. Nó cũng cung cấp tốc độ hiện tại và thời gian dự kiến cho đến khi hoàn thành.
    Bây giờ bạn sẽ có một số hành động với array như sau:


    Dừng một array (Stopping an Array)
    Để dừng một array, bước đầu tiên là để unmount nó, sử dụng các lệnh sau:
    Mã:
    cd ~
    sudo umount /mnt/md0
    
    Bạn có thể dừng tất cả các array hoạt động bằng cách gõ:
    Mã:
     sudo mdadm --stop –scan
    Nếu bạn muốn dừng lại một array cụ thể, sử dụng lệnh:
    Mã:
    sudo mdadm --stop /dev/md0
    Điều này sẽ dừng array. Bạn sẽ phải lắp ráp lại (reassemble) các mảng để truy cập vào nó một lần nữa.

    Khởi động từ một array (Starting an Array)

    Để khởi động tất cả các array được định nghĩa trong file cấu hình hoặc /proc/mdstat, sử dụng lệnh:
    Mã:
    sudo mdadm --assemble --scan
    Để bắt đầu một array cụ thể, dùng lệnh:
    Mã:
    sudo mdadm --assemble /dev/md0
    Điều này hoạt động nếu array được định nghĩa trong file cấu hình.
    Nếu định nghĩa chính xác cho array bị thiếu trong các tập tin cấu hình, array vẫn có thể được khởi động bằng dùng lệnh:
    Mã:
    sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd
    Một khi array được lắp ráp (assembled), nó có thể được gắn kết (mounted) như bình thường:
    Mã:
    sudo mount /dev/md0 /mnt/md0
    Thêm một thiết bị dự phòng (spare) cho một mảng
    Thiết bị dự phòng có thể được thêm vào bất kỳ arrays mà cung cấp khả năng dự phòng (như RAID 1, 5, 6, hoặc 10). Dự phòng sẽ không được chủ động sử dụng bởi array trừ khi một thiết bị không hoạt động.
    Khi điều này xảy ra, các array sẽ lại đồng bộ dữ liệu vào ổ đĩa dự phòng để sửa chữa array sang trạng thái bình thường (hết lỗi).

    Để thêm một dự phòng, dùng lệnh:
    Mã:
    sudo mdadm /dev/md0 --add /dev/sde
    Nếu mảng không phải là ở trong tình trạng xuống cấp, thiết bị mới sẽ được thêm vào như là một dự phòng. Nếu thiết bị đang bị xuống cấp, hoạt động đồng bộ hoá sẽ ngay lập tức bắt đầu sử dụng dự phòng thay thế ổ đĩa bị lỗi.

    Sau khi bạn thêm một dự phòng, cập nhật các tập tin cấu hình dùng lệnh:
    Mã:
     sudo nano /etc/mdadm/mdadm.conf
    Xóa bỏ hoặc chú thích (comment) dòng hiện tại tương ứng với định nghĩa array của bạn:
    Mã:
    . . .
    # ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=d81c843b:4d96d9fc:5f3f499c:6ee99294
    
    Sau đó, thêm vào cấu hình hiện tại của bạn:
    Mã:
    sudo mdadm --detail --brief /dev/md0 | sudo tee -a /etc/mdadm/mdadm.conf
    Các thông tin mới sẽ được sử dụng bởi các tiện ích mdadm để lắp ráp (assemble) array

    Tăng số thiết bị hoạt động trong một array
    Nó có thể phát triển một array bằng cách tăng số lượng các thiết bị hoạt động trong lắp ráp. Các thủ tục chính xác phụ thuộc đáng kể vào cấp độ RAID mà bạn đang sử dụng.
    Với RAID 1 hay 10

    Bắt đầu bằng cách thêm các thiết bị mới như một dự phòng, cũng như thể hiện trong phần cuối cùng:
    Mã:
    sudo mdadm /dev/md0 --add /dev/sde
    Tìm ra số lượng hiện tại của các thiết bị RAID trong array:
    Mã:
     sudo mdadm --detail /dev/md0
    Mã:
    Output
    /dev/md0:
            Version : 1.2
      Creation Time : Wed Aug 10 15:29:26 2016
         Raid Level : raid1
         Array Size : 104792064 (99.94 GiB 107.31 GB)
      Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
       Raid Devices : 2
      Total Devices : 3
        Persistence : Superblock is persistent
    
        . .
    
    Chúng ta có thể thấy rằng trong ví dụ này, array được cấu hình để chủ động sử dụng hai thiết bị, và tổng số thiết bị có sẵn đến array là ba (vì chúng tôi đã thêm một dự phòng).

    Bây giờ, cấu hình lại array để có một thiết bị hoạt động bổ sung. Các dự phòng sẽ được sử dụng để đáp ứng các yêu cầu ổ đĩa bổ sung:
    Mã:
    sudo mdadm --grow --raid-devices=3 /dev/md0
    Array sẽ bắt đầu cấu hình lại với một đĩa hoạt động bổ sung. Để xem được quá trình đồng bộ hoá dữ liệu, dùng lệnh:
    Mã:
    cat /proc/mdstat
    Bạn có thể tiếp tục sử dụng các thiết bị như quá trình hoàn tất.

    Với RAID 5 hoặc 6
    Bắt đầu bằng cách thêm các thiết bị mới như một dự phòng, cũng như thể hiện trong phần cuối cùng:
    Mã:
    sudo mdadm /dev/md0 --add /dev/sde
    Tìm ra số lượng hiện tại của các thiết bị RAID trong array:
    Mã:
     sudo mdadm --detail /dev/md0
    Mã:
    Output
    /dev/md0:
            Version : 1.2
      Creation Time : Wed Aug 10 18:38:51 2016
         Raid Level : raid5
         Array Size : 209584128 (199.88 GiB 214.61 GB)
      Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
       Raid Devices : 3
      Total Devices : 4
        Persistence : Superblock is persistent
    
        . . .
    
    Chúng ta có thể thấy rằng trong ví dụ này, array được cấu hình để chủ động sử dụng ba thiết bị, và tổng số thiết bị có sẵn đến array là bốn (bởi vì chúng tôi đã thêm một dự phòng).

    Bây giờ, cấu hình lại array để có một thiết bị hoạt động bổ sung. Các dự phòng sẽ được sử dụng để đáp ứng các yêu cầu ổ đĩa bổ sung:. Khi phát triển một RAID 5 hoặc RAID 6 array, điều quan trọng là bao gồm một tùy chọn bổ sung được gọi --backup-file. Điều này sẽ trỏ đến một địa điểm nơi một tập tin sao lưu có chứa thông tin quan trọng sẽ được lưu trữ.

    Mã:
     sudo mdadm --grow --raid-devices=4 --backup-file=/root/md0_grow.bak /dev/md0
    Các kết quả sau đây chỉ ra rằng phần sẽ được sao lưu:
    Mã:
    Output
    mdadm: Need to backup 3072K of critical section..
    
    
    Array sẽ bắt đầu cấu hình lại với một đĩa hoạt động bổ sung. Để xem được quá trình đồng bộ hoá dữ liệu, dùng lệnh:
    Mã:
    cat /proc/mdstat
    Sau khi reshape hoàn tất, bạn sẽ cần phải mở rộng hệ thống tập tin trên array để tận dụng không gian bổ sung:
    Mã:
    sudo resize2fs /dev/md0
    Array của bạn bây giờ sẽ có một hệ thống tập tin phù hợp khả năng của nó

    Với RAID 0
    Bởi vì RAID 0 arrays không thể có ổ đĩa dự phòng (không có cơ hội cho một dự phòng để xây dựng lại một hư hỏng RAID 0 arrays), chúng ta phải thêm các thiết bị mới cùng một lúc.
    Đầu tiên, tìm ra số lượng hiện tại của các thiết bị RAID trong mảng:
    Mã:
    sudo mdadm --detail /dev/md0
    Mã:
    Output
    /dev/md0:
            Version : 1.2
      Creation Time : Wed Aug 10 19:17:14 2016
         Raid Level : raid0
         Array Size : 209584128 (199.88 GiB 214.61 GB)
       Raid Devices : 2
      Total Devices : 2
        Persistence : Superblock is persistent
    
        . . .
    
    Bây giờ chúng ta có thể tăng số lượng thiết bị RAID trong hoạt động tương tự như việc bổ sung ổ đĩa mới:
    Mã:
     sudo mdadm --grow /dev/md0 --raid-devices=3 --add /dev/sdc
    Bạn sẽ thấy đầu ra cho thấy mảng đã được thay đổi đến RAID 4:
    Mã:
    Output
    mdadm: level of /dev/md0 changed to raid4
    mdadm: added /dev/sdc
    
    Điều này là bình thường và dự kiến. Array sẽ chuyển trở lại vào RAID 0 khi dữ liệu đã được phân phối lại cho tất cả các ổ đĩa hiện có.
    Bạn có thể kiểm tra dùng lệnh:
    Mã:
    cat /proc/mdstat
    Khi đồng bộ hoàn tất, thay đổi kích thước hệ thống tập tin để sử dụng thêm không gian:
    Mã:
    sudo resize2fs /dev/md0
    Array của bạn bây giờ sẽ có một hệ thống tập tin phù hợp khả năng của nó

    Loại bỏ một thiết bị từ một Array (Removing a Device from an Array)
    Loại bỏ một ổ đĩa từ một RAID array đôi khi cần thiết nếu có một lỗi hoặc nếu bạn cần phải chuyển đổi đĩa.

    Đối với một thiết bị phải được loại bỏ, nó trước tiên phải được đánh dấu là "failed" trong array. Bạn có thể kiểm tra nếu có một thiết bị thất bại bằng cách sử dụng mdadm --detail:

    Mã:
    sudo mdadm --detail /dev/md0
    Mã:
    
    Output
    /dev/md0:
            Version : 1.2
      Creation Time : Wed Aug 10 21:42:12 2016
         Raid Level : raid5
         Array Size : 209584128 (199.88 GiB 214.61 GB)
      Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
       Raid Devices : 3
      Total Devices : 3
        Persistence : Superblock is persistent
    
        Update Time : Thu Aug 11 14:10:43 2016
              [B]State : clean, degraded [/B]
    Active Devices : 2
    Working Devices : 2
    [B]Failed Devices : 1[/B]
      Spare Devices : 0
    
             Layout : left-symmetric
         Chunk Size : 64K
    
               Name : mdadmwrite:0  (local to host mdadmwrite)
               UUID : bf7a711b:b3aa9440:40d2c12e:79824706
             Events : 144
    
        Number   Major   Minor   RaidDevice State
           0       0        0        0      removed
           1       8        0        1      active sync   /dev/sda
           2       8       16        2      active sync   /dev/sdb
           [B]0       8       32        -      faulty   /dev/sdc[/B]
    
    Các dòng tô đậm tất cả cho thấy một ổ đĩa cứng không còn hoạt động (/dev/sdc trong ví dụ này).

    Nếu bạn cần phải loại bỏ một ổ đĩa mà không có vấn đề, bạn có thể tự đánh dấu nó như là thất bại với tùy chọn --fail:
    Mã:
    sudo mdadm /dev/md0 --fail /dev/sdc
    Mã:
    Output
    mdadm: set /dev/sdc faulty in /dev/md0
    
    Nếu bạn nhìn vào đầu ra của mdadm --detail, bạn sẽ thấy thiết bị được đánh dấu bị lỗi.
    Sau khi thiết bị được đánh dấu thất bại, bạn có thể loại bỏ nó từ mảng với mdadm --remove:
    Mã:
     sudo mdadm /dev/md0 --remove /dev/sdc
    Mã:
    Output
    mdadm: hot removed /dev/sdc from /dev/md0
    
    Sau đó bạn có thể thay thế nó bằng một ổ đĩa mới, dùng lệnh:
    Mã:
    sudo mdadm /dev/md0 --add /dev/sdd
    Mã:
    Output
    mdadm: added /dev/sdd
    
    Array sẽ bắt đầu phục hồi bằng cách sao chép dữ liệu vào ổ đĩa mới.

    Xóa một array (Deleting an Array)
    Để xóa một array, bao gồm tất cả các dữ liệu chứa bên trong. Các bước thực hiện như sau:
    Đầu tiên, unmount hệ thống tập tin:

    Mã:
    cd ~
    sudo umount /mnt/md0
    
    Tiếp theo, dừng array
    Mã:
     sudo mdadm --stop /dev/md0
    Xóa array
    Mã:
     sudo mdadm --remove /dev/md0
    Một khi mảng được loại bỏ, bạn nên sử dụng mdadm --zero-superblock trên mỗi thiết bị thành phần. Điều này sẽ xóa md superblock, một tiêu đề được sử dụng bởi mdadm để lắp ráp (assemble) và quản lý các thiết bị thành phần như là một phần của một mảng. Nếu md superblock vẫn còn hiện diện, nó có thể gây ra vấn đề khi cố gắng tái sử dụng các đĩa cho các mục đích khác.

    Kiểm tra md superblock bằng lệnh:
    Mã:
    lsblk --fs
    Mã:
    Output
    NAME    FSTYPE            LABEL        UUID                                 MOUNTPOINT
    sda     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
    sdb     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
    sdc     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
    sdd                                                                       
    vda                                                                       
    ├─vda1  ext4              DOROOT       4f8b85db-8c11-422b-83c4-c74195f67b91 /
    └─vda15
    
    Trong ví dụ này, /dev/sda, /dev/sdb, và /dev/sdc là tất cả phần của array và vẫn đang được dán nhãn.
    Hủy bỏ các nhãn bằng cách dùng lệnh:
    Mã:
    sudo mdadm --zero-superblock /dev/sda /dev/sdb /dev/sdc
    Tiếp theo, hãy chắc chắn bạn loại bỏ hoặc chú thích (comment) bất kỳ tham chiếu nào đến array trong file /etc/fstab:
    Mã:
     sudo nano /etc/fstab
    Mã:
    . . .
    
    # /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0
    
    Lưu và đóng file khi bạn kết thúc.
    Loại bỏ hoặc chú thích (comment) ra bất kỳ tham chiếu đến mảng từ file /etc/mdadm/mdadm.conf:
    Mã:
    nano /etc/mdadm/mdadm.conf
    Mã:
    # ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=bf7a711b:b3aa9440:40d2c12e:79824706
    
    Lưu và đóng file khi bạn kết thúc.
    Cập nhật initramfs bằng cách gõ:

    Mã:
    sudo update-initramfs -u
    Điều này sẽ loại bỏ thiết bị từ môi trường khởi động sớm (the early boot environment).
     
Tags:

Chia sẻ trang này

Đang tải...