Ubuntu 18.04에서는 다음과 같이 RAID 1 어레이를 만들었습니다.
mdadm --create /dev/md/myarray --level=1 --run --raid-devices=2 /dev/sdc /dev/sdd
mdadm --detail --scan /dev/md/myarray
그런 다음 /etc/mdadm/mdadm.conf에 출력을 추가했습니다 . 다음과 같습니다.
ARRAY /dev/md/myarray metadata=1.2 name=MYHOSTNAME:myarray UUID=...
장치 이름 앞에는 "MYHOSTNAME:"이 붙습니다. 이 시점에서는 심볼릭 링크가 /dev/md/myarray
여전히 존재했지만 처음 재부팅한 후에는 변경되어 /dev/md/MYHOSTNAME:myarray
문제가 발생했습니다. 더 나쁜 것은 이것이 다음과 같은 경우에만 발생한다는 것입니다.일부기계 - 다른 기계에는 심볼릭 링크가 여전히 존재합니다 /dev/md/myarray
. 모두 Ubuntu 18.04를 실행하고 있으므로 이유를 모르겠습니다.
내 MD 장치에 대한 일관된 장치 경로, 바람직하게는 내가 지정한 경로("/dev/md/myarray")를 얻으려면 어떻게 해야 합니까? 호스트 이름을 제거하기 위해 mdadm.conf를 편집하려고 시도했지만 해당 줄에도 다음과 같은 내용이 나와 있습니다.
ARRAY /dev/md/myarray metadata=1.2 name=myarray UUID=...
호스트 이름이 "필요한" 시스템에서는 재부팅 시 심볼릭 링크가 계속 변경됩니다. 또한 다른 방법으로 두 곳에 호스트 이름을 추가해 보았습니다.
ARRAY /dev/md/HOSTNAME:myarray metadata=1.2 name=HOSTNAME:myarray UUID=...
그러나 호스트 이름을 "원하지 않는" 시스템에서는 재부팅 후 심볼릭 링크가 /dev/md/myarray가 되었습니다!
디지털 장치(/dev/md127)도 사용할 수 없습니다. 이렇게 여러 개의 MD 장치를 만들면 md126과 md127도 번갈아 사용하는 경향이 있기 때문입니다! 이건 미친 짓이야!
답변1
내 MD 장치에 대한 일관된 장치 경로, 바람직하게는 내가 지정한 경로("/dev/md/myarray")를 얻으려면 어떻게 해야 합니까?
이후에는 mdadm --create /dev/md/foobar ...
mdadm 메타데이터에 저장 hostname
되며 다음을 사용하여 확인 해야 합니다 .name
mdadm --examine
mdadm --detail
# mdadm --detail /dev/md/foobar
Name : ALU:foobar (local to host ALU)
ALU
내 ArchLinux 시스템의 호스트 이름은 다음과 같습니다.
# hostname
ALU
생성 시 저장해야 하는 호스트를 지정할 수 있습니다.
# mdadm --create /dev/md/foobar --homehost=barfoo
# mdadm --detail /dev/md/foobar
Name : barfoo:foobar
...하지만 대개는 아무도 그 일을 기억하지 않습니다.
이것은 이미 문제가 시작되는 곳입니다... 일부 LiveCD 또는 다른 디스크에서 RAID 배열을 만들었을 수 있으며 해당 환경의 호스트 이름이 기본 설치와 일치하지 않습니다. 그런 다음 메타데이터는 전혀 관련이 없는 일부 호스트 이름을 저장합니다.
마찬가지로 모든 것을 올바르게 설정했지만 RAID 문제가 발생하여 확인을 위해 복구 시스템을 실행하는 경우에도 여전히 호스트 이름 불일치가 발생합니다.
또는 반대로 두 개의 별도 시스템에 동일한 호스트 이름을 사용한 다음 드라이브를 마이그레이션하는 경우 잘못된 시스템이더라도 호스트 이름이 일치할 수 있습니다. 그런 다음 Alien Array가 원래 이름을 대체했습니다.
mdadm --assemble --update=homehost
이제 메타데이터를 나중에 사용하거나 변경할 수도 있는데 --update=name
, 이는 문제를 해결하는 한 가지 방법입니다. 올바르게 설정해야 하지만 (어떤 이유로든) 직접적인 16진수 편집 메타데이터가 부족하고 어셈블리 타임에만 수행할 수 있기 때문에 변경하기가 어렵습니다.
또 다른 접근 방식은 시스템을 무시 hostname
하고 대신 --homehost
어셈블리에 지정 HOMEHOST
하거나 mdadm.conf
. mdadm.conf 맨페이지에 이에 대한 자세한 설명이 나와 있습니다.
홈 호스팅
홈호스트 동작 mdadm은 --homehost= 옵션에 대한 기본값을 제공합니다. 일반적으로 한 줄에는 다른 단어가 하나만 있어야 합니다. 호스트 이름 또는 특수 단어<system>
중<none>
하나 여야 합니다<ignore>
. 주어진 경우<system>
gethostname(2) 시스템 호출을 사용하여 호스트 이름을 얻습니다. 이것이 기본 설정입니다.
[...]
이 호스트 이름은 어레이가 생성될 때 메타데이터에 저장됩니다. 자동 조립을 사용하여 배열을 조립할 때 메타데이터에 기록된 올바른 호스트 이름이 없는 배열은 "외부" 이름을 사용하여 조립됩니다. "외국인" 이름은 가능한 지역 이름과 구별하기 위해 항상 밑줄이 앞에 오는 숫자 문자열로 끝납니다. 예를 들어 /dev/md/1_1 또는 /dev/md/home_0입니다.
HOMEHOST ALU
따라서 (내 경우에는) 설정을 시도해 보거나 더 일반적으로는 HOMEHOST <ignore>
(또는 HOMEHOST <none>
)을 시도해 볼 수 있습니다 mdadm.conf
. 하지만 mdadm.conf
거기에 있는 경우에만 작동합니다. 마찬가지로 무시를 설정한 다음 다른 컴퓨터의 배열을 연결하면 이름 충돌이 발생할 수 있습니다.
따라서 메타데이터와 mdadm.conf에서 호스트 이름을 올바르게 설정하고 이를 무시하지 않는 것이 가장 좋으며, 어셈블리 전에 initramfs에서 실제 호스트 이름을 설정하는 것이 더 좋지만 실제로 적용하기 어려울 수 있습니다.
개인적으로 선호하는 것은 고전적인 디지털 스타일을 고수하는 것입니다. UUID로만 식별:
ARRAY /dev/md1 UUID=8fe790ca:f3fa3388:4ae125b6:2c3a5d44
ARRAY /dev/md2 UUID=f14bef5b:a5356e51:25fde128:09983091
ARRAY /dev/md3 UUID=0639c68d:4c844bb1:5c02b33e:00ab4a93
이는 또한 일관성이 있습니다(그러나 이 방법으로 생성되었는지 및/또는 메타데이터에 적절하게 설정되었는지 여부에 따라 달라집니다. 그렇지 않으면 --update
그렇게 해야 할 수도 있습니다). 주어진 UUID와 일치하지 않는 외부 배열은 /dev/md127+
.
결국 무엇을 하든 맹목적으로 의지해서는 안 되고 /dev/mdX
, 글자 /dev/md/name
에만 맹목적으로 의지하지 말아야 하는 것처럼 말입니다 /dev/sdX
. 이러한 어레이의 콘텐츠를 식별하려면 항상 파일 시스템 UUID를 사용하십시오.
이름이 예기치 않게 변경될 수 있는 극단적인 경우가 너무 많기 때문에 이는 기껏해야 모든 질문에 대한 답변보다는 시스템 관리자에게 방향성 도움말이나 힌트를 제공하는 것입니다.
답변2
저는 Arch Linux를 사용하고 있으며 동일한 문제를 경험했습니다. 나와 동일한 호스트를 사용하여 RAID5 어레이를 만들었습니다. mdadm --detail /dev/md/data
다음 줄을 표시하십시오
Name : MY-NAS:data (local to host MY-NAS)
UUID : 3f3b2cba:5c184b08:183f0bc1:4bb971a1
Events : 14720
내 호스트 이름은 입니다 MY-NAS
. 해당 명령을 사용하면 mdadm --detail --scan >> /etc/mdadm.conf
RAID 어셈블리를 위한 추가 라인이 생겼습니다.
ARRAY /dev/md/data metadata=1.2 spares=1 name=MY-NAS:data UUID=3f3b2cba:5c184b08:183f0bc1:4bb971a1
그러나 컴퓨터를 다시 시작하면 /dev/md/MY-NAS:data
대신 어레이가 나타납니다 /dev/md/data
. 그러면 mdadm --stop /dev/md/MY-NAS:data
에 mdadm --assemble --scan
나타납니다 /dev/md/data
.
udev 규칙이 어떻게 작동하는지 더 깊이 이해한 후https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/tree/udev-md-raid-arrays.rules, 나는 당신이 필요하다고 믿습니다
mdadm_udev
후크를 앞에 놓으세요 .lvm
mkinitcpio -P
/etc/mdadm.conf
파일이 직접 추가되므로 변경이 있을 때마다 실행됩니다.initramfs
이 작업을 수행하면 장치 이름이 수정됩니다.
참고: 저는 Arch Linux 사용자입니다. Ubuntu/Debian의 경우 mkinitcpio
이는 다음과 같습니다. update-initramfs
https://askubuntu.com/questions/1210480/ubuntu-equivalent-of-mkinitcpio-conf. 하지만 후크 순서를 수정하는 방법을 모르겠습니다.