웹사이트 검색

Ubuntu 22.04에서 mdadm으로 RAID 어레이를 관리하는 방법


소개

RAID 어레이는 개별 디스크를 특정 구성의 가상 저장 장치에 결합하여 향상된 성능과 중복성을 제공합니다. Linux에서 mdadm 유틸리티는 소프트웨어 RAID 배열을 만들고 관리합니다.

이전 가이드에서 Ubuntu 22.04에서 mdadm을 사용하여 RAID 어레이를 생성하는 방법을 다루었습니다. 이 가이드에서는 Ubuntu 22.04 서버에서 RAID 어레이를 관리하는 방법을 보여줍니다.

전제 조건

이 가이드를 따르려면 루트가 아닌 sudo 사용자에 대한 액세스 권한이 필요합니다. Ubuntu 22.04 초기 서버 설정 가이드에 따라 적절한 사용자를 설정할 수 있습니다.

앞에서 언급했듯이 이 가이드에서는 RAID 어레이 관리를 다룹니다. 이 가이드를 시작하기 전에 Ubuntu 22.04에서 mdadm을 사용하여 RAID 어레이를 만드는 방법에 대한 가이드를 따라 하나 이상의 어레이를 만듭니다. 이 가이드에서는 작업할 어레이가 하나 이상 있다고 가정합니다.

정보: 가상 사설 서버에서 RAID 설정의 비효율성으로 인해 DigitalOcean 드롭릿에 RAID 설정을 배포하는 것을 권장하지 않습니다. 데이터 센터 디스크 복제의 효율성은 베어메탈 하드웨어의 설정에 비해 RAID의 이점을 무시할 수 있게 만듭니다. 이 자습서는 기존 RAID 설정에 대한 참조를 목표로 합니다.

RAID 장치에 대한 정보 쿼리

올바른 관리를 위한 가장 필수적인 요구 사항 중 하나는 어레이의 구조, 구성 요소 장치 및 현재 상태에 대한 정보를 찾는 기능입니다.

RAID 장치에 대한 자세한 정보를 보려면 -D 또는 --detail 옵션과 함께 RAID 장치를 mdadm에 전달하십시오.

  1. sudo mdadm -D /dev/md0

어레이에 대한 중요한 정보가 표시됩니다.

Output
/dev/md0: Version : 1.2 Creation Time : Thu Sep 29 17:07:10 2022 Raid Level : raid10 Array Size : 209582080 (199.87 GiB 214.61 GB) Used Dev Size : 104791040 (99.94 GiB 107.31 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Thu Sep 29 17:08:24 2022 State : clean, resyncing Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Consistency Policy : resync Name : raid2:0 (local to host raid2) UUID : 8069bcc7:72e7b49f:fba1c780:560a85e0 Events : 35 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

출력에는 RAID 수준, 어레이 크기, 개별 조각의 상태, 어레이의 UUID, 구성 요소 장치 및 해당 역할이 표시됩니다.

/dev/mdadm/mdadm.conf 파일에 추가하기에 적합한 배열의 간략한 세부 정보를 보려면 --brief 또는 -를 전달할 수 있습니다. 상세 보기가 있는 b 플래그:

  1. sudo mdadm -Db /dev/md0
Output
ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=8069bcc7:72e7b49f:fba1c780:560a85e0

사람이 읽을 수 있는 RAID 장치 요약을 빠르게 얻으려면 -Q 옵션을 사용하여 쿼리하십시오.

  1. sudo mdadm -Q /dev/md0
Output
/dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.

RAID 장치에 대한 주요 정보를 한눈에 찾는 데 사용할 수 있습니다.

구성 요소 장치에 대한 정보 얻기

mdadm을 사용하여 개별 구성 요소 장치를 쿼리할 수도 있습니다.

구성 요소 장치와 함께 사용할 때 -Q 옵션은 어레이의 일부와 역할을 알려줍니다.

  1. sudo mdadm -Q /dev/sdc
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.

-E 또는 --examine 옵션을 사용하여 더 자세한 정보를 얻을 수 있습니다.

  1. sudo mdadm -E /dev/sdc
Output
/dev/sdc: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : 8069bcc7:72e7b49f:fba1c780:560a85e0 Name : RAID2204:0 (local to host RAID2204) Creation Time : Wed Oct 5 15:56:03 2022 Raid Level : raid10 Raid Devices : 4 Avail Dev Size : 209582080 sectors (99.94 GiB 107.31 GB) Array Size : 209582080 KiB (199.87 GiB 214.61 GB) Data Offset : 133120 sectors Super Offset : 8 sectors Unused Space : before=132968 sectors, after=0 sectors State : clean Device UUID : 027f74c5:6d488509:64844c7a:add75d88 Update Time : Wed Oct 5 16:13:57 2022 Bad Block Log : 512 entries available at offset 136 sectors Checksum : 98edf3ae - correct Events : 35 Layout : near=2 Chunk Size : 512K Device Role : Active device 2 Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)

이 정보는 배열 장치와 함께 -D 옵션을 사용할 때 표시되는 정보와 비슷하지만 배열에 대한 구성 요소 장치의 관계에 초점을 맞춥니다.

/proc/mdstat 정보 읽기

서버에서 어셈블된 각 배열에 대한 자세한 내용은 /proc/mdstat 파일을 확인하십시오. 시스템에서 활성 어레이의 현재 상태를 찾는 가장 좋은 방법은 다음과 같습니다.

  1. cat /proc/mdstat
Output
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [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>

여기서 출력은 매우 조밀하여 작은 공간에 많은 정보를 제공합니다.

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
. . .

Personalities 줄은 커널이 현재 지원하는 다양한 RAID 수준과 구성을 설명합니다.

md0로 시작하는 줄은 RAID 장치 설명의 시작 부분을 설명합니다. 다음의 들여쓰기된 줄도 이 장치를 설명합니다.

. . .
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
. . .

첫 번째 줄은 어레이가 활성 상태이고 결함이 없으며 RAID 10으로 구성되었음을 나타냅니다. 그 다음에는 어레이를 구축하는 데 사용된 구성 요소 장치가 나열됩니다. 괄호 안의 숫자는 어레이에서 장치의 현재 역할을 설명합니다. 이는 장치에 제공되는 데이터 사본에 영향을 미칩니다.

. . .
      209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
. . .

이 예에 표시된 두 번째 줄은 가상 장치가 제공한 블록 수, 메타데이터 버전(이 예에서는 1.2) 및 어레이의 청크 크기를 제공합니다. 이것은 RAID 10 어레이이므로 어레이의 레이아웃에 대한 정보도 포함합니다. 이 예에서는 가까운 레이아웃에 각 데이터 청크의 복사본 두 개를 저장하도록 구성되었습니다.

대괄호 안의 마지막 항목은 둘 다 정상 세트에서 현재 사용 가능한 장치를 나타냅니다. 숫자 괄호 안의 첫 번째 숫자는 정상 배열의 크기를 나타내고 두 번째 숫자는 현재 사용 가능한 장치 수를 나타냅니다. 다른 대괄호는 배열 상태를 시각적으로 표시하며 U는 정상 장치를 나타내고 _는 결함 장치를 나타냅니다.

어레이가 현재 어셈블 중이거나 복구 중인 경우 진행 상황을 보여주는 다른 라인이 있을 수 있습니다.

. . .
      [>....................]  resync =  0.9% (2032768/209584128) finish=15.3min speed=225863K/sec
. . .

적용되는 작업과 현재 진행 상황을 다양한 방식으로 설명합니다. 또한 현재 속도와 완료까지의 예상 시간을 제공합니다.

현재 시스템에서 어떤 어레이가 실행되고 있는지 잘 파악한 후 취할 수 있는 여러 조치가 있습니다.

어레이 중지

어레이를 중지하기 위한 첫 번째 단계는 어레이를 마운트 해제하는 것입니다.

cd ~ 명령을 사용하여 마운트된 디렉토리 외부로 이동합니다.

  1. cd ~

그런 다음 장치를 마운트 해제합니다.

  1. sudo umount /mnt/md0

다음을 실행하여 모든 활성 어레이를 중지할 수 있습니다.

  1. sudo mdadm --stop --scan

특정 어레이를 중지하려면 mdadm --stop 명령에 전달하십시오.

  1. sudo mdadm --stop /dev/md0

어레이가 중지됩니다. 다시 액세스하려면 어레이를 다시 조립해야 합니다.

어레이 시작

구성 파일 또는 /proc/mdstat에 정의된 모든 배열을 시작하려면 다음을 실행합니다.

  1. sudo mdadm --assemble --scan

특정 배열을 시작하려면 mdadm --assemble에 인수로 전달할 수 있습니다.

  1. sudo mdadm --assemble /dev/md0

배열이 구성 파일에 정의된 경우 작동합니다.

어레이에 대한 올바른 정의가 구성 파일에서 누락된 경우에도 구성 요소 장치를 전달하여 어레이를 시작할 수 있습니다.

  1. sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd

어레이가 조립되면 평소와 같이 마운트할 수 있습니다.

  1. sudo mount /dev/md0 /mnt/md0

이제 마운트 지점에서 어레이에 액세스할 수 있습니다.

어레이에 예비 장치 추가

예비 장치는 RAID 1, 5, 6 또는 10과 같이 중복성을 제공하는 모든 어레이에 추가할 수 있습니다. 활성 장치가 실패하지 않는 한 어레이에서 예비 장치를 적극적으로 사용하지 않습니다. 이 경우 어레이는 데이터를 예비 드라이브에 다시 동기화하여 어레이를 전체 상태로 복구합니다. 중복되지 않는 어레이(RAID 0)에는 드라이브 장애 시 어레이가 유지되지 않으므로 예비 부품을 추가할 수 없습니다.

여분을 추가하려면 배열과 새 장치를 mdadm --add 명령에 전달합니다.

  1. sudo mdadm /dev/md0 --add /dev/sde

어레이가 성능 저하 상태가 아닌 경우 새 장치가 스페어로 추가됩니다. 장치가 현재 성능이 저하된 경우 결함이 있는 드라이브를 교체하기 위해 스페어를 사용하여 재동기화 작업이 즉시 시작됩니다.

스페어를 추가한 후 새 장치 방향을 반영하도록 구성 파일을 업데이트합니다.

  1. sudo nano /etc/mdadm/mdadm.conf

배열 정의에 해당하는 현재 줄을 제거하거나 주석 처리합니다.

. . .
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=d81c843b:4d96d9fc:5f3f499c:6ee99294

그런 다음 현재 구성을 추가합니다.

  1. sudo mdadm --detail --brief /dev/md0 | sudo tee -a /etc/mdadm/mdadm.conf

새 정보는 mdadm 유틸리티에서 배열을 어셈블하는 데 사용됩니다.

어레이의 활성 장치 수 늘리기

어셈블리 내의 활성 장치 수를 늘려 어레이를 확장할 수 있습니다. 정확한 절차는 사용 중인 RAID 수준에 따라 약간 다릅니다.

RAID 1 또는 10 사용

마지막 섹션에서 설명한 것처럼 새 장치를 예비 장치로 추가하여 시작합니다.

  1. sudo mdadm /dev/md0 --add /dev/sde

어레이에서 현재 RAID 장치 수를 찾으십시오.

  1. sudo mdadm --detail /dev/md0
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 . . .

이 예에서 어레이는 두 개의 장치를 능동적으로 사용하도록 구성됩니다. 그러나 스페어로 인해 어레이에 사용 가능한 총 장치 수가 3개임을 나타냅니다.

이제 추가 활성 장치를 갖도록 어레이를 재구성하십시오. 예비 드라이브는 추가 드라이브 요구 사항을 충족하는 데 사용됩니다. 이 명령에서 목표 수의 RAID 장치를 교체해야 합니다. 여기에서는 장치가 2개인 RAID 1을 3으로 늘립니다. 장치가 4개인 RAID 10에 있고 추가 드라이브가 있는 경우 드라이브를 5로 늘리십시오.

  1. sudo mdadm --grow --raid-devices=3 /dev/md0

어레이가 추가 활성 디스크로 재구성되기 시작합니다. 데이터 동기화 진행률을 보려면 다음을 실행합니다.

  1. cat /proc/mdstat

프로세스가 완료되면 장치를 계속 사용할 수 있습니다.

RAID 5 또는 6 사용

마지막 섹션에 설명된 대로 새 장치를 예비 장치로 추가하여 시작합니다.

  1. sudo mdadm /dev/md0 --add /dev/sde

어레이에서 현재 RAID 장치 수를 찾으십시오.

  1. sudo mdadm --detail /dev/md0
Output
/dev/md0: Version : 1.2 Creation Time : Wed Oct 5 18:38:51 2022 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 . . .

이 예에서 어레이는 3개의 장치를 능동적으로 사용하도록 구성되었으며 어레이에 사용 가능한 총 장치 수는 추가된 예비 장치로 인해 4개입니다.

이제 추가 활성 장치를 갖도록 어레이를 재구성하십시오. 예비 드라이브는 추가 드라이브 요구 사항을 충족하는 데 사용됩니다. RAID 5 또는 RAID 6 어레이를 확장할 때 --backup-file이라는 추가 옵션을 포함하는 것이 중요합니다. 이는 중요한 정보가 포함된 백업 파일이 저장될 어레이 외부 위치를 가리킵니다.

참고: 백업 파일은 이 과정에서 매우 짧지만 중요한 시간 동안만 사용되며 그 후에는 자동으로 삭제됩니다. 이것이 필요한 시간이 짧기 때문에 디스크에서 파일을 볼 수 없을 가능성이 높지만 문제가 발생하는 경우 어레이를 재구축하는 데 사용할 수 있습니다. 이 게시물에는 더 알고 싶은 추가 정보가 있습니다.

  1. sudo mdadm --grow --raid-devices=4 --backup-file=/root/md0_grow.bak /dev/md0

다음 출력은 중요 섹션이 백업됨을 나타냅니다.

Output
mdadm: Need to backup 3072K of critical section..

어레이가 추가 활성 디스크로 재구성되기 시작합니다. 데이터 동기화 진행률을 보려면 다음을 실행합니다.

  1. cat /proc/mdstat

이 프로세스가 완료되면 장치를 계속 사용할 수 있습니다.

재구성이 완료되면 어레이의 파일 시스템을 확장하여 추가 공간을 활용해야 합니다.

  1. sudo resize2fs /dev/md0

어레이는 이제 용량과 일치하는 파일 시스템을 갖게 됩니다.

RAID 0 사용

손상된 RAID 0 어레이를 재구축할 스페어가 없기 때문에 RAID 0 어레이는 스페어 드라이브를 가질 수 없습니다. 어레이 확장과 동시에 새 장치를 추가해야 합니다.

먼저 어레이에 있는 현재 RAID 장치 수를 확인합니다.

  1. sudo mdadm --detail /dev/md0
Output
/dev/md0: Version : 1.2 Creation Time : Wed Aug 10 19:17:14 2020 Raid Level : raid0 Array Size : 209584128 (199.88 GiB 214.61 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent . . .

이제 새 드라이브 추가와 동일한 작업에서 RAID 장치 수를 늘릴 수 있습니다.

  1. sudo mdadm --grow /dev/md0 --raid-devices=3 --add /dev/sdc

어레이가 RAID 4로 변경되었음을 나타내는 출력을 받게 됩니다.

Output
mdadm: level of /dev/md0 changed to raid4 mdadm: added /dev/sdc

이것은 정상적이고 예상되는 것입니다. 데이터가 모든 기존 디스크에 재분배되면 어레이가 다시 RAID 0으로 전환됩니다.

작업 진행 상황을 확인할 수 있습니다.

  1. cat /proc/mdstat

동기화가 완료되면 추가 공간을 사용하도록 파일 시스템 크기를 조정합니다.

  1. sudo resize2fs /dev/md0

어레이는 이제 용량과 일치하는 파일 시스템을 갖게 됩니다.

어레이에서 장치 제거

결함이 있거나 디스크를 교체해야 하는 경우 RAID 어레이에서 드라이브를 제거해야 하는 경우가 있습니다.

장치를 제거하려면 먼저 배열 내에서 "failed\로 표시해야 합니다. mdadm --detail을 사용하여 실패한 장치가 있는지 확인할 수 있습니다.

  1. sudo mdadm --detail /dev/md0
Output
/dev/md0: Version : 1.2 Creation Time : Wed Aug 10 21:42:12 2020 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 2020 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 1 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 0 8 32 - faulty /dev/sdc

강조 표시된 줄은 모두 드라이브가 더 이상 작동하지 않음을 나타냅니다. 예를 들어 이 출력의 /dev/sdc는 드라이브에 결함이 있음을 나타냅니다.

문제가 없는 드라이브를 제거해야 하는 경우 --fail 옵션을 사용하여 수동으로 실패로 표시할 수 있습니다.

  1. sudo mdadm /dev/md0 --fail /dev/sdc
Output
mdadm: set /dev/sdc faulty in /dev/md0

mdadm --detail의 출력을 검토하면 장치가 이제 결함으로 표시되었음을 알 수 있습니다.

장치가 실패하면 mdadm --remove를 사용하여 어레이에서 장치를 제거할 수 있습니다.

  1. sudo mdadm /dev/md0 --remove /dev/sdc
Output
mdadm: hot removed /dev/sdc from /dev/md0

그런 다음 예비 드라이브를 추가하는 데 사용하는 것과 동일한 mdadm --add 명령을 사용하여 새 드라이브로 교체할 수 있습니다.

  1. sudo mdadm /dev/md0 --add /dev/sdd
Output
mdadm: added /dev/sdd

어레이는 데이터를 새 드라이브에 복사하여 복구를 시작합니다.

어레이 삭제

포함된 모든 데이터를 포함하여 어레이를 파괴하려면 먼저 어레이를 중지하는 데 사용되는 프로세스를 따르십시오.

다음 명령을 사용하여 마운트된 디렉터리 외부로 이동합니다.

  1. cd ~

그런 다음 파일 시스템을 마운트 해제합니다.

sudo umount /mnt/md0

다음으로 어레이를 중지합니다.

  1. sudo mdadm --stop /dev/md0

그런 다음 RAID 장치를 대상으로 하는 --remove 명령을 사용하여 어레이 자체를 삭제합니다.

  1. sudo mdadm --remove /dev/md0

어레이 자체가 제거되면 각 구성 요소 장치에서 mdadm --zero-superblock을 사용하십시오. 이렇게 하면 mdadm에서 배열의 일부로 구성 요소 장치를 조립하고 관리하는 데 사용하는 헤더인 md 수퍼 블록이 지워집니다. 여전히 존재하는 경우 다른 용도로 디스크를 재사용하려고 할 때 문제가 발생할 수 있습니다.

lsblk --fs 출력에서 FSTYPE 열을 확인하여 어레이에 수퍼 블록이 있는지 확인합니다.

  1. lsblk --fs
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

이 예에서 /dev/sda, /dev/sdb/dev/sdc는 모두 배열의 일부였으며 여전히 레이블이 지정되어 있습니다. 이와 같이.

다음 명령을 사용하여 레이블을 제거합니다.

  1. sudo mdadm --zero-superblock /dev/sda /dev/sdb /dev/sdc

다음으로 /etc/fstab 파일에서 배열에 대한 모든 참조를 제거하거나 주석 처리해야 합니다. 시작 부분에 해시태그 기호 #를 추가하면 됩니다.

  1. sudo nano /etc/fstab
. . .
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0

완료되면 파일을 저장하고 닫습니다.

/etc/mdadm/mdadm.conf 파일에서도 배열에 대한 모든 참조를 제거하거나 주석 처리합니다.

  1. nano /etc/mdadm/mdadm.conf
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=bf7a711b:b3aa9440:40d2c12e:79824706 

완료되면 파일을 저장하고 닫습니다.

그런 다음 initramfs를 업데이트합니다.

  1. sudo update-initramfs -u

이렇게 하면 초기 부팅 환경에서 장치가 제거됩니다.

결론

Linux의 mdadm 유틸리티는 배열이 사용하는 규칙과 정보를 찾을 수 있는 위치를 이해하면 배열을 관리하는 데 도움이 됩니다. 이 가이드는 완전하지는 않지만 일상적으로 수행해야 할 수 있는 일부 관리 작업을 소개합니다.

mdadm을 사용하여 RAID 어레이를 만들고 관리하는 데 익숙해지면 다음에 탐색할 수 있는 다양한 방향이 있습니다. LVM과 같은 볼륨 관리 계층은 RAID와 긴밀하게 통합되어 공간을 논리 볼륨으로 유연하게 분할할 수 있습니다. 자세한 내용은 LVM 개념 소개 자습서를 검토하십시오.

마찬가지로 LUKS 및 dm-crypt 암호화는 일반적으로 파일 시스템을 작성하기 전에 RAID 장치를 암호화하는 데 사용됩니다. Linux에서는 이러한 모든 기술을 함께 사용하여 스토리지 기능을 향상시킬 수 있습니다.