Bash 스크립트에서 파일 시스템 가용성을 확인하는 방법은 무엇입니까?

Bash 스크립트에서 파일 시스템 가용성을 확인하는 방법은 무엇입니까?

overlayfs, aufs, Unionfs 중 하나에 의존하는 스크립트가 있는 경우 bash 스크립트에서 사용 가능한 항목을 결정하는 가장 좋은 방법은 무엇입니까? overlayfs를 사용하고 싶지만 사용할 수 없는 경우 aufs 또는 Unionfs로 대체합니다. 커널 버전을 추측으로 받아들일 수 있습니다. 하지만 커널 버전이 3.18 이상이라고 해서 overlayfs가 내장되어 있다는 의미는 아닙니다. 확인할 수 있는 아주 확실한 방법이 있습니까?

답변1

Linux에서는 실행 중인 커널에서 사용할 수 있는 파일 시스템 유형을 파일에서 확인할 수 있습니다 /proc/filesystems. 이 파일의 내용은 커널이 읽을 때 실시간으로 구성되므로 현재 상태를 반영합니다. 파일 형식은 약간 짜증납니다. 각 줄에는 8개의 공백 뒤에 파일 시스템 유형이 오거나 nodev3개의 공백 뒤에 파일 시스템 유형이 옵니다. 사용 가능한 파일 시스템 유형을 가져오거나 grep -w(이라는 파일 시스템 유형을 찾지 않는 한 nodev) 사용하려면 각 줄의 처음 8자를 제거하십시오 .

if grep -qw aufs /proc/filesystems; then
  echo aufs is available
fi

파일 시스템 드라이버가 현재 로드되지 않은 모듈로 제공될 수 있으므로 이것이 완전한 이야기는 아닙니다. 모듈을 로드할 수 있다고 가정하고, 파일 시스템을 사용할 수 없으면 로드해 보세요. 파일 시스템 모듈에는 다음과 같은 형식의 별칭이 있습니다(실제 모듈 이름은 일반적으로 파일 시스템 유형의 이름이지만 항상 그런 것은 아닙니다).fs-FSTYPE

if grep -qw aufs /proc/filesystems; then
  echo aufs is available
elif modprobe fs-aufs; then
  echo now aufs is available
fi

이는 커널 파일 시스템용입니다. FUSE 파일 시스템의 경우 fuse파일 시스템을 사용할 수 있는지 확인하고 파일 시스템을 구현하는 실행 파일을 찾습니다. fuse에서 를 찾을 수 있지만 /proc/filesystems이는 사용 가능한지 여부만 알려주는 것이지 프로그램에 이를 사용할 수 있는 충분한 권한이 있는지 여부는 알려주지 않습니다. 실제로 보다 신뢰할 수 있는 테스트는 /dev/fuse.

if [ -w /dev/fuse ]; then
  echo FUSE is available
  if type unionfs-fuse >/dev/null 2>/dev/null; then 
    echo unionfs-fuse is available
  fi
fi

관련 정보