Loop device
In Unix-like operating systems, a loop device, vnd (vnode disk), or lofi (loop file interface) is a pseudo-device that makes a file accessible as a block device.
루프백(Loopback) 장치 vs 루프(Loop) 장치
- 루프백 장치 (Loopback device)
- 통신에서 시그널이나 데이터 스트림들을 변형 없이 발생한 소스로 되돌리는 pseudo 장치를 말한다.
- 루프 장치 (Loop device)
- 파일을 블록 디바이스 형태로 접근할 수 있도록 해 주는 pseudo 장치를 말한다.
About
리눅스의 많은 시스템의 정보, 혹은 디바이스 등은 파일로의 연동이 되어 있다. 이를테면 /dev
아래엔 실제 컴퓨터에 연결된 하드웨어들이 파일로 연결되어 있는 것을 확인할 수 있다. 프로세스(/proc)의 정보 또한 마찬가지로 파일로 되어 있다. 이는 실제 어떤 자원을 파일로서 논리화한 것인데, 그렇다면 파일을 어떤 장치로 논리화할 수는 없을까?
루프 디바이스의 간략한 설명
man loop
로 man페이지를 확인하면 다음과 같은 문구를 확인할 수 있다.
The loop device is a block device that maps its data blocks not to a physical device such as a hard disk or optical disk drive, but to the blocks of a regular file in a filesystem or to another block device. This can be useful for example to provide a block device for a filesystem image stored in a file, so that it can be mounted with the mount(8) command….
그러니까 간단히 이야기하면 루프 디바이스는 블록 디바이스이긴 한데 이게 디스크 등의 실제 장치는 아니고, 파일시스템 안의 파일과 다른 블록 스토리지의 맵핑을 위해 사용한다는 정도로 이해해 두면 되겠다. 이름이 왜 loop인가 하면 리눅스에서의 실제 파일 개념이 한번 더 돌아왔기 때문이다. 장치가 파일로 변환되었는데, 파일이 다시 장치로 변환된 그런 느낌으로다가 이해하면 될 것 같다.
또 다른 설명
Image file이 마치 일반적인 Block device인 것 처럼 만들어 마운트될 수 있게 하는 디바이스 드라이버이다. (이미지 파일을 일반적인 Block device 로 사용하는 것)
또 또 다른 설명
Linux에서는 사용자가 일반 파일을 가상 블록 장치에 매핑할 수 있는 특수 블록 장치를 생성할 수 있습니다.
간단히 말해서 루프 장치는 스냅과 같은 격리된 프로그램으로 작업하는 동안 매우 유용한 가상 파일 시스템으로 작동할 수 있습니다.
따라서 기본적으로 특정 마운트 지점에 분리된 파일 시스템이 마운트됩니다. 개발자/고급 사용자가 한 곳에 여러 파일을 압축하는 방식입니다. 따라서 운영체제에서 액세스할 수 있으며 이러한 동작을 루프 마운트라고 합니다.
루프 장치를 사용하는 이유
가상 파일 시스템이면서 무한한 가능성이 있습니다. 다음은 널리 알려진 루프 장치 사용 사례입니다.
- 드라이브를 다시 분할하지 않고도 파일 시스템을 통해 운영 체제를 설치하는 데 사용할 수 있습니다.
- 시스템 이미지를 구성하는 편리한 방법입니다 (마운트 후).
- 데이터의 영구적인 분리를 제공합니다.
- 필요한 모든 종속성을 포함하는 샌드박스 애플리케이션에 사용할 수 있습니다.
그리고 개발자는 격리된 파일 시스템이 제공되면 놀라운 일을 할 수 있습니다.
루프 장치는 losetup 유틸리티를 통해 쉽게 관리할 수 있습니다.
시스템에서 사용중인 루프 디바이스
명령어 losetup을 사용하면 현재 시스템에서 어떤 루프 디바이스가 사용중인지를 알 수 있다. losetup
:
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop1 0 0 1 1 /var/lib/snapd/snaps/core_6673.snap 0 512
/dev/loop2 0 0 1 1 /var/lib/snapd/snaps/core_6405.snap 0 512
/dev/loop0 0 0 1 1 /var/lib/snapd/snaps/core_6531.snap 0 512
/dev/loop3 0 0 1 1 /var/lib/snapd/snaps/fceux-gui_3.snap 0 512
시스템에서는 루프 디바이스 4개를 사용중이다. BACK-FILE, device backing file이 가리키는 파일을 한번 확인해 보자.
ls -la /var/lib/snapd/snaps/
:
합계 333344
drwxr-xr-x 3 root root 4096 3월 29 05:02 .
drwxr-xr-x 19 root root 4096 4월 26 14:52 ..
-rw------- 2 root root 95416320 3월 6 18:20 core_6405.snap
-rw------- 1 root root 95522816 3월 13 04:58 core_6531.snap
-rw------- 1 root root 93581312 3월 29 05:02 core_6673.snap
-rw------- 2 root root 56795136 3월 6 18:21 fceux-gui_3.snap
drwxr-xr-x 2 root root 4096 12월 1 2017 partial
그리고 루프백의 결과로 생긴 블록 디바이스는 fdisk를 통해서 또 확인할 수 있다.
sudo fdisk -l
:
Disk /dev/loop0: 91.1 MiB, 95522816 bytes, 186568 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 /dev/loop1: 89.3 MiB, 93581312 bytes, 182776 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 /dev/loop2: 91 MiB, 95416320 bytes, 186360 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 /dev/loop3: 54.2 MiB, 56795136 bytes, 110928 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
...