동일한 장착 지점에 대체 장치 설치(다른 장착 옵션 포함)

동일한 장착 지점에 대체 장치 설치(다른 장착 옵션 포함)

핫스왑 가능한 드라이브 베이가 있는 서버(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 -amount /common_mount_pointmountalldpkg -s mountallmountall --versionsudo mount -afstab

답변1

udev와 동일한 장치 이름을 사용하십시오.

/etc/fstabUUID를 나열하는 대신 장치 이름을 나열하고 모든 장치에 대해 동일한 장치 이름을 사용하도록 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"

관련 정보