커널 기본 마운트 옵션을 재정의하는 방법은 무엇입니까?

커널 기본 마운트 옵션을 재정의하는 방법은 무엇입니까?

저는 파일 내에 파일 시스템을 생성하고 이를 루프백 장치로 마운트하는 프로그램을 작업 중입니다. 이 프로그램의 목적은 루트 파일 시스템의 복제본을 생성하는 것이며, 블록 장치의 UUID를 복사하는 것도 매우 영리하다고 생각합니다. 그런데 XFS를 사용하고 있기 때문에 UUID 값이 중복되어 루프백 설치가 실패합니다.

수동 설치를 사용할 수 있지만 mount -o nouuid프로그램이 장치를 다시 만들고 자체 설치를 시도합니다. fstab을 사용하지 않기 때문에 거기에서 기본 마운트 옵션을 설정할 수 없습니다.

nouuid마운트를 실행할 때 기본 옵션이 무엇인지 커널에 알리고 해당 옵션을 명시적으로 지정하지 않고 호출된 명령 에서도 mount해당 옵션을 사용하도록 옵션을 설정할 수 있는 방법이 있습니까 ?

답변1

모든 파일 시스템에 적용되는 공통 옵션의 경우핵심mount기본 제공 기본값이 없는 부울 플래그 배열로 시스템 호출에 전달된 마운트 옵션을 적용합니다 .

xfs의 경우 커널구문 분석 옵션내장된 기본값(모든 비트는 0입니다.부울 플래그의 경우).

mount따라서 올바른 옵션이 시스템 호출 에 전달되도록 준비해야 합니다 . 프로그램이 이 mount프로그램을 호출하는 경우 래퍼를 작성하여 옵션을 동적으로 변경할 수 있습니다.

#!/bin/sh
if [ "$(ps -p $PPID -o comm=)" = "annoying-program" ]; then
  case "$* " in
    *" -t xfs "*) set -- -o nouuid "$@";;
  esac
fi
exec /sbin/mount "$@"

이 스크립트를 mountPATH 앞에 넣거나, 프로그램에 하드코딩된 경로가 있는 경우 mount임시로 mount다른 위치로 이동하여 해당 위치에 스크립트를 넣습니다.

프로그램이 mount시스템 호출을 직접 호출하는 경우 다음을 수행할 수 있습니다.커버리지를 통해 전화LD_PRELOAD.

관련 정보