순환 장비가 필요한 이유는 무엇입니까?

순환 장비가 필요한 이유는 무엇입니까?

나는 이전에 이미지 파일을 생성하고 dd이를 사용하여 파일 시스템을 설정하고 mkfs마운트 mount된 파티션으로 액세스했습니다. 나중에 losetup루프 장치 항목을 미리 만들어서 /dev마운트 하는 사례를 인터넷에서 많이 봤습니다 . 루프 장치 역할을 하고 /dev동일한 동작을 얻기 위해 아무런 문제도 일으키지 않고 자체 항목을 갖기 위해 실제로 이미지 파일이 필요한 이유를 이해할 수 없습니다.

요약:실제 시나리오에서 /dev/loopX항목 없이 fs 이미지를 마운트할 수 있는데 항목이 존재해야 하는 이유는 무엇입니까? 순환 장비의 용도는 무엇입니까?

답변1

일반적으로 설치는 블록 장치에서 수행되어야 합니다. 루프 드라이버는 블록 장치 프런트 엔드를 데이터 파일에 넣습니다.

루프 설치를 수행하지 않으면 losetup운영 체제는 백그라운드에서 루프 설치를 수행합니다.

예를 들어

$ dd if=/dev/zero of=/tmp/foo bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0798775 s, 1.3 GB/s
$ mke2fs /tmp/foo
mke2fs 1.42.9 (28-Dec-2013)
....


$ losetup    
$ mount -o loop /tmp/foo /mnt1    
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         1  0 /tmp/foo
$ umount /mnt1
$ losetup
$ 

losetup파일 이미지에 파티션이 포함되어 있는 경우 직접 호출해야 할 수도 있습니다.

예를 들어 다음 이미지가 있는 경우:

$ fdisk -l /tmp/foo2      

Disk /tmp/foo2: 104 MB, 104857600 bytes, 204800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1f25ff39

     Device Boot      Start         End      Blocks   Id  System
/tmp/foo2p1            2048      204799      101376   83  Linux

직접 설치가 안되네요

$ mount -o loop /tmp/foo2 /mnt1
mount: /dev/loop0 is write-protected, mounting read-only
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error

losetup하지만 다음 을 사용하면 kpartx파티션에 액세스할 수 있습니다.

$ losetup -f /tmp/foo2
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /tmp/foo2
$ kpartx -a /dev/loop0
$ mount /dev/mapper/loop0p1 /mnt1
$

답변2

파일 시스템에서는 읽고 쓰기 위한 블록 장치가 필요하지만 이미지 파일은 블록 장치가 아닙니다. 루프 장치는 파일 위에 블록 장치(또는 선택적으로 다시 매핑된 다른 블록 장치)를 제공합니다.

대부분의 경우 이미지를 설치할 때 루프 장치가 모든 것을 처리하기 때문에 루프 장치에 대해 생각할 필요가 없습니다. mount그러나 루프 장치는 여전히 관련되어 있습니다. losetup -l -a보여줄 것입니다.

당신은 또한 볼 수 있습니다mount와 mount -o loop의 차이점은 무엇입니까?.

답변3

기능 이름이 잘못된 Linux를 사용하고 있는 것 같습니다.

나는 1988년 SunOS-4.0에서 이 기능을 개발했는데, 이를 fbk"파일 에뮬레이션 블록 장치"라고 불렀습니다.

배경은 장치 드라이버가 일반 파일 위에 블록 장치를 에뮬레이트한다는 것입니다. 파일 시스템은 일반 파일을 파일 시스템의 백업 스토리지로 사용할 수 없기 때문에 이것이 필요합니다. 에뮬레이션 되는 블록 장치가 더 필요합니다 fbk.

시간이 지남에 따라 일부 사람들은 프로그램을 더 똑똑하게 만들었고 프로그램이 블록 장치로 예상되는 인수가 계획 파일로 나타나는 것을 감지 하는 경우 파일에 대한 인스턴스를 mount자동으로 생성하는 마운트 구현이 있습니다 .fbkmount

답변4

백그라운드의 파일에서 파일 시스템을 마운트할 때는 필요하지 않지만 블록 장치가 절대적으로 필요한 드라이버나 프로그램을 사용하는 설정에는 여전히 필요합니다. nbd(네트워크 블록 장치) 서버, mdraid, lvm 등과 같은 복잡한 블록 장치 드라이버를 생각해 보세요.

관련 정보