루프 장치를 보기 위해 losstup -a를 사용하고 있지만 길이 제한(62자)이 있습니다. 그래서 실제로 어떤 루프 장치를 원하는지 결정할 수 없습니다.
전임자:
[root@r7byach]# losetup -a
/dev/loop0: [fc03]:33030504 (/storage5_vol1/6/ABCD116476-linux-ubuntu-10_04-64b-base-07150/*)
/dev/loop1: [0015]:4933 (/storage4/5/ABCD12345-linux-centos-5-64b-base-86836/hdc)
/dev/loop1을 사용하여 출력을 얻을 수 있습니다.
losetup -a|grep diskPath |cut -f1 -d:|cut -f3 -d/
하지만 이름이 완전하지 않기 때문에 Loop0에서 장치를 가져올 수 없습니다.
크기 제한에 관계없이 루프 장치를 얻는 방법은 무엇입니까?
답변1
커널 2.6.37부터 기본 파일의 이름을 검색하여 이를 수행할 수 있습니다(길이 제한 없음) /sys/block/loopX/loop/backing_file
. 이 losetup
명령은 util-linux 2.19부터 이 방법을 지원합니다.
답변2
최신 커널(≥ 2.6.37)은 다음을 참조하세요.피터 유젤의 답변. 이전 커널에서는 이러한 길이 제한이 내재되어 있습니다.
strace는 losetup -a
이름을 얻어서 보여줍니다.LOOP_GET_STATUS
호출하는 ioctlloop_get_status_old
, 이는 다음에서 데이터를 가져옵니다.struct loop_info
. 이 커널 데이터 구조의 이름 필드는 다음으로 제한됩니다.LO_NAME_SIZE
= 64바이트. ( loop_get_status64
및 도 있지만 struct loop_info64
동일한 제한이 있습니다.) 따라서 제한은 내재되어 있으며 더 잘할 수 없습니다.
그럼에도 불구하고 이 데이터 구조는 기본 장치나 파일의 원래 이름을 표시하지만 이름을 바꾸거나 삭제할 수도 있으며 이는 losetup
.
예를 들어 출력에는 파일의 losetup
파일 시스템 식별자( ) 및 inode( )가 표시됩니다. st_dev
()로 시작하는 줄을 보면 파일 시스템의 블록 장치를 찾을 수 있습니다. 그런 다음 에서 해당 블록 장치의 마운트 지점을 찾으세요. 그런 다음 파일 찾기를 실행하십시오. 예, 복잡합니다. 아니요, 더 빠른 방법은 없습니다.st_ino
[fc03]:33030504
/proc/partitions
252 3
/proc/mounts
find /mount/point -inum 33030504
debugfs
일부 파일 시스템 유형의 경우).