핫스왑 가능한 드라이브 베이가 있는 서버(Ubuntu 14.04 실행)가 있습니다. 저는 일반적으로 대규모 과학 데이터 세트를 전송하는 여러 개의 하드 드라이브 중 하나를 장착하기 위해 핫스왑 가능한 베이를 사용합니다. 이러한 디스크 중 일부에는 다른 마운트 옵션(다른 파일 시스템, SSD 대 HDD 등)이 필요하며 일반적으로 /etc/fstab
.
이 데이터 일괄 처리 및 백업을 위한 일부 스크립팅을 단순화하기 위해 현재 연결된 핫 스왑 가능 디스크 중 하나에 대해 항상 동일한 마운트 지점을 사용하도록 서버를 구성하고 싶습니다.
나는 다음과 같은 것을 내 안에 넣어 보았습니다 fstab
.
UUID=<disk A> /common_mount_point ext4 defaults,discard,noatime 0 0
UUID=<disk B> /common_mount_point btrfs defaults,compress=lzo 0 0
이것은 디스크 A를 마운트하려고 할 때 제대로 작동하지만 디스크 B를 마운트하려고 할 때마다 오류가 발생합니다.
mount: special device UUID=<disk B> does not exist
이 두 줄의 순서를 바꾸면 반대가 발생하므로 mount
해당 특정 마운트 지점을 참조하는 첫 번째 줄만 찾는 것처럼 보이고 fstab
관련 파일 시스템 설명자를 찾을 수 없으면 오류가 발생합니다.
마운트 작업 중 하나가 성공할 때까지 동일한 마운트 지점에 여러 개의 서로 다른 UUID를 순차적으로 마운트하려고 시도하는 bash 스크립트를 작성할 수 있다고 생각하지만 좀 더 우아한 솔루션을 기대합니다.
업데이트 1
sudo mount -a
흥미롭게 도 대신 호출하면 mount /common_mount_point
디스크 B가 성공적으로 마운트되지만 디스크 A의 UUID를 찾을 수 없다는 오류 메시지가 계속 표시됩니다. 따라서 mount -a
동일한 마운트 지점을 사용하는 여러 항목이 시도될 것 같지만 이 작업을 수행하기 위해 fstab
반드시 그럴 필요는 없습니다 .sudo
이 행동은 다음과 관련이 있는 것 같습니다.이 보고된 오류여기 mountall
, 이것은v2.50에서 수정된 것으로 보입니다.. Trusty 저장소의 최신 버전은 여전히 2.49이므로 최신 버전의 PPA를 찾을 수 있는지 알아보겠습니다.
업데이트 2
in 대신에 호출할 때만 호출 mountall
되었기 때문에 in 의 오류는 관련이 없는 것으로 나타났습니다 . mountall
사실, 출력에 따르면 저는 이미 v2.53을 실행하고 있습니다(v2.49라고 말했음에도 불구하고). 이는 아마도 여러 라인이 동일한 마운트 지점을 참조하려고 시도한다는 사실을 설명합니다.mount -a
mount /common_mount_point
mountall
dpkg -s mountall
mountall --version
sudo mount -a
fstab
답변1
udev와 동일한 장치 이름을 사용하십시오.
/etc/fstab
UUID를 나열하는 대신 장치 이름을 나열하고 모든 장치에 대해 동일한 장치 이름을 사용하도록 udev를 설정할 수 있습니다. 다음 파일에 이와 같은 줄을 넣으십시오 /etc/udev/rules.d
.
KERNEL=="sd*", ATTRS{serial}=="123456798", NAME="one_of_my_disks%n"
또는
KERNEL=="sd*", ATTRS{serial}=="123456798", SYMLINK+="one_of_my_disks%n"
udevadm info -a -n sdb
위의 예와 같이 일치할 수 있는 디스크 속성을 확인하려면 실행하세요 . ATTRS{serial}=="123456798"
여러 속성만 사용할 수 있지만 모두 동일한 섹션에 있어야 합니다.
그런 다음 에서는 블록 장치 /etc/fstab
로 사용됩니다 ./dev/one_of_my_disks
디스크의 레이아웃이 다른 경우 상황은 더욱 복잡해집니다. 파일 시스템 유형 에 사용할 수 있습니다 auto
. 이는 대부분의 유형에 작동합니다. 그러나 다른 파티션 번호나 마운트 옵션이 필요한 경우에는 다른 fstab 항목이 필요합니다. fstab
시스템에서 디스크가 감지되면 실행되는 udev 항목에 의해 호출되는 스크립트를 동적으로 편집하여 이 문제를 해결할 수 있습니다 . 예를 들어 다음 udev 규칙을 사용합니다.
KERNEL=="sd*", ATTRS{serial}=="123456798", ENV{FSTAB4}="compress=lzo", NAME="one_of_my_disks%n", RUN+="/usr/local/sbin/fstab_update_my_disk"
그리고 다음 fstab_update_my_disk
스크립트(테스트되지 않음):
#!/bin/sh
/usr/bin/sed -i -e '/^\/dev\/one_of_my_disks1/ s/\([^ \t][^ \t]*[ \t][ \t]*[^ \t][^ \t]*[ \t][ \t]*[^ \t][^ \t]*[ \t][ \t]*\)[^ \t][^ \t]*/\1'"$FSTAB4"'/'
udev를 사용하면 마운트 지점이 중요하지 않습니다.
또 다른 접근 방식은 장치 이름과 마운트 지점이 다른 별도의 fstab 항목을 유지하는 것입니다. 그러나 udev RUN
후크를 사용하여 마운트 지점을 가리키는 심볼릭 링크를 업데이트하십시오.
KERNEL=="sd*", ATTRS{serial}=="123456798", RUN+="/bin/ln -snf /media/disk1 /media/one_of_my_disks"