검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : Configuring 2 mirrored disks on Ubuntu Linux

  디스크 2개로 미러링을 구성하는 방법을 소개합니다. 데비안 계열의 배포판을 기준으로 설명하고 있지만 패키지 설치를 제외한 대부분의 작업은 배포판과 상관 없이 가능할 것입니다.

  당연히 소프트웨어 RAID이므로 별도의 컨트롤러를 사용할 때와 달리 머신의 자원(CPU, RAM)을 소모하지만 요즘 컴퓨터의 성능을 생각하면 문제가 되진 않습니다. 다만 쓰기 작업 자체는 좀 느려질 수도 있다고 합니다.

필요한 소프트웨어 설치
  리눅스에서 사용하는 표준 RAID 관리 툴은 mdadm이며 최근 배포판이라면 저장소에 있을 겁니다. apt-get으로 설치합니다.
$ sudo apt-get install mdadm
  생각지도 못하게 의존성으로 인해 postfix를 설치하는데 postfix도 설정한다면 RAID에 문제가 있을 때 메일을 보내줘서 유용하지만 설정하지 않아도 상관 없습니다.

디스크 파티셔닝
  이 예제에서는 디스크 전체를 사용하여 RAID를 구성합니다. 부착 후 장치명 확인은 fdisk -l로 확인할 수 있으며 root 권한이 필요하므로 root 계정이 아니라면 sudo가 필요합니다. 구성할 디스크의 이름은 sdb와 sdc인 것으로 가정합니다. 이 둘을 미러링으로 구성하여 /data에 마운트하겠습니다.

  먼저 파티셔닝이 필요합니다. 아래는 sdb를 설정하는 과정입니다.
$ sudo fdisk /dev/sdb
(fdisk 실행 후)
n         ; 새 파티션 생성
p         ; 프라이머리 파티션 생성
1         ; 파티션 번호 선택
엔터       ; 시작 섹터(디폴트로 첫 섹터)
엔터       ; 마지막 섹터(디폴트로 끝 섹터)
t         ; 타입 변경
fd        ; "Linux raid auto detect" 선택
w         ; 변경사항 저장 후 종료
  같은 과정을 /dev/sdc에 대해서도 실시합니다.

RAID 생성
  아래는 RAID 생성 방법과 출력 예입니다.
$ sudo mdadm --create /dev/md0  --level=mirror --raid-devices=2 /dev/sdb1 /dev/sdc1
(부팅 용으로 사용할 때 주의사항 및 최종 확인에서 y 입력)
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
  이것으로 두 리얼 블록 디바이스를 미러 모드로 설정하여 /dev/md0라는 가상 디바이스를 생성했습니다. 이제 RAID 초기화를 설정했으므로 미러가 구성(construction)되며 두 디바이스의 내용이 동기화됩니다.(두 디바이스에 내용이 없으므로 지금 상황에선 중요하지 않습니다.) /proc/mdstat 파일을 확인하면 /dev/dm0 디바이스가 시작됐는지, 미러는 재구성됐는지, 재구성(reconstruction)이 완료되기까지 남은 시간은 얼마인지 알 수 있습니다.
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[1] sdb1[0]
      52394880 blocks super 1.2 [2/2] [UU]
      [===>.................]  resync = 17.9% (9400064/52394880) finish=3.5min speed=200000K/sec
  재구성(reconstruction)은 안 쓰는 I/O 대역폭을 사용하기 때문에 작업 중 시스템의 I/O 속도에 큰 영향을 끼치지 않습니다. 또한 재구성 작업은 투명성 있게 진행하기 때문에 미러가 재구성 중이더라도 디바이스를 사용할 수 있습니다. 그러므로 포맷하고 마운트해서 사용할 수도 있습니다.

mdadm.conf 파일 생성
  다른 배포판과 마찬가지로 우분투에서는 부팅 과정에서 시스템이 모든 디바이스를 스캔하여 자동으로 RAID를 작동시킵니다. 그래서 사실은 mdadm.conf 파일을 설정할 필요가 없습니다. 하지만 배우는 입장이므로 RAID 설정을 작성해볼 가치가 있습니다. 우분투의 경우 이 파일의 위치는 /etc/mdadm/mdadm.conf이며 설정하기 가장 쉬운 방법은 아래 명령어를 사용한 후 그 결과를 파일에 추가하는 겁니다.
$ sudo mdadm --detail --scan --verbose

리부팅 후 md 디바이스 이름이 변하는 문제
  만약 여기서 리부팅을 하면 md0의 이름에서 뒤의 숫자가 랜덤으로 바뀌고 /dev/md 디렉토리가 생기면서 그 안에 디바이스에 대한 심볼릭 링크가 생깁니다. 아마도 부팅 시 새로운 디바이스를 인식하면서 udev가 맘대로 벌이는 일 같은데 이 현상은 생성한 디바이스에 대한 정보를 initrd(initial ramdisk) 파일에 업데이트하여 막을 수 있으며 방법은 아래와 같습니다.
$ sudo update-initramfs -u
  이때 앞서 설명했던 방법을 통해 mdadm.conf 파일에 생성한 디바이스 정보를 입력하지 않았다면 경고가 나올 수 있는데 실제로 문제가 되진 않습니다.
  그리고 리부팅을 통해 파일 이름이 변하는 것이 나쁘다고 볼 수는 없는 게 /dev/md 디렉토리에 적절한 이름으로 심볼릭 링크를 만들어주기 때문에 경우에 따라선 더 좋을 수도 있습니다. 만약 부팅 이미지를 업데이트하지 않고 리부팅을 해서 디바이스명을 시스템이 알아서 바꾸게 만들기로 했다면 다음 단계에서 /etc/fstab 파일에 엔트리를 등록하기 전에 리붓을 해야 합니다. 그렇지 않으면 부팅 시 md0의 파일명이 변해서 마운트 과정에서 에러가 발생합니다.

RAID 메타디바이스에 파일시스템 생성 및 마운트
  아까 생성했던 디바이스를 원하는 파일시스템으로 포맷합니다.
$ sudo mkfs.ext4 /dev/md0
  마운트포인트를 만들고 마운트를 합니다.
$ sudo mkdir /data
$ sudo mount /dev/md0 /data
  그리고 부팅 시 자동으로 마운트하도록 /etc/fstab에 추가합니다. 앞에서 initrd 파일을 업데이트하지 않고 리부팅해서 디바이스명이 바꼈다면 /dev/md 디렉토리에 생성된 링크 파일명을 /dev/md0 대신 입력합니다.
/dev/md0    /data    ext4    defaults    0    0
2013/07/05 23:37 2013/07/05 23:37