어떻게 블록 장치 (또는 그 일부)가 장착되었는지 쉽게 알아내는 방법


10

블록 장치 (예 :) sdb또는 일부가 마운트되어 있는지 (및 그 일부 ) 여부를 결정하는 가장 쉬운 방법은 무엇입니까 (루트 권한없이) 알고 싶습니다 .

LVM에서 파티션 중 하나 또는 파티션을 사용할 수 있으므로 /proc/mountssdb를 확인 하는 것만으로는 충분하지 않습니다 sdb. 확인할 수는 /sys/block/sdb/sdb*/holders/있지만 dm-x확인하려면 /dev/mapper이름 으로 확인해야하는 항목이 표시됩니다 /proc/mounts. 가능하지만 더 쉬운 해결책이 있다면 ... (루트 권한이 필요하지 않아야 함)


2
궁금합니다. 장치가 마운트되어 있는지 확인하려고하지 않았습니까? * / 홀더 및 * / * / 홀더는 / proc / mounts 테이블에 장치가없는 경우 마운트 된 것을 알려주기에 충분합니다. 왜 더 해결해야합니까? 즉, cryptsetup은 홀더에 추가하여 드라이브를 망쳐서는 안된다는 것을 나타냅니다. / dev / mapper가 마운트되지 않았거나 암호화 손상을 유발하더라도. 드라이버를 통해 내부적으로 마운트되는 것입니다. 또한 파티션없이 드라이브를 "유지"할 수 있으므로 / sys / block / sdb / holders도 확인해야합니다.
Rahly

답변:


12

이것은 본질적으로 코너 케이스 전체를 확인하는 문제입니다.

  • 드라이브는 / proc / mounts에 나타날 수 있습니다
  • 드라이브를 스왑으로 사용할 수 있습니다 (/ proc / swaps 사용)
  • 드라이브는 활성 LVM pv의 일부일 수 있습니다 (pvdisplay 사용).
  • 드라이브는 dm-mapper RAID 그룹의 일부일 수 있습니다 (/ proc / mdstat 사용).
  • 애플리케이션에 의해 드라이브에 직접 액세스 할 수 있습니다 (예 : Oracle은 파일 시스템 대신 드라이브 또는 파티션에 직접 쓰기 지원) (퓨저 사용)
  • 가상 머신에서 직접 드라이브에 액세스 할 수 있음 (퓨저 사용)
  • 드라이브가 루프백 장치에 의해 참조 할 수 있습니다 (예 : mount /dev/sda -o offset=1M /foo) (사용 losetup을의 -a)

이것들은 내가 생각하기 위해 1 분 반 정도 주어진 예입니다. 나는 다른 12 명이 있다고 확신합니다.

내가 생각하는 마지막 예는 가장 흥미롭고 그것에 대해 아는 사람들은 거의 없습니다. 파티션을 사용하지 않고 파일 시스템을 마운트 할 수 있습니다. 시작 오프셋 만 지정하면 Linux에서 루프백 장치를 투명하게 만듭니다. 위의 예는 다음과 같습니다.

# cat /proc/mounts
...
/dev/loop0 /foo ext4 relatime,data=ordered 0 0

# losetup -a
/dev/loop0 [0005]:2048 (/dev/sda), offset 1048576

왜 그렇게 하시겠습니까? 일반적으로 이전에는 끔찍하게 잘못 된 상황이 포함됩니다.

또한 현재 메인 라인에 이름 공간 기능이 있으면 ( 공유 해제 참조 ), 프로세스마다 마운트 된 것과 마운트되지 않은 것에 대해 다른 뷰를 가질 수 있습니다. 여기서 약간의 빨간 약이 시작됩니다.


1

장치를 마운트하는 훨씬 더 많은 방법이 있으며, 모든 장치를 결합 할 수 있기 때문에 종종 사용자가 알아내는 것이 좋습니다.

즉, lvm에서 사용되는 것 : pvdisplay

따라서 nfs, cifs, raid, loop, crypt 등도 포함해야합니다. /proc/mounts이미 언급했듯이 좋은 출발점은 항상 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.