레이블이 block인 게시물을 표시합니다. 모든 게시물 표시
레이블이 block인 게시물을 표시합니다. 모든 게시물 표시

2014년 12월 21일 일요일

Loop device

이전글 "디스크 파티션 분석"에서 램디스크를 사용하여 가상의 블럭장치를 만들었다. 가상의 블럭 장치를 만들기 위한 더 일반적인 방법은 루프 장치를 사용하는 것이다. 아래와 같은 명령으로 루프 장치를 만들 수 있다.

먼저 dd 명령으로 가상 블럭 장치로 사용할 512KB 크기의 VirtualDisk.img라는 파일을 만든다. 
# dd if=/dev/zero of=VirtualDisk.img bs=512 count=1024  
1024+0 records in
1024+0 records out
# ls -l ./VirtualDisk.img 
-rw-rw-r--   1 root      root         524288 Dec 21 15:50 ./VirtualDisk.img

이제 devb-loopback을 실행시켜 해당 파일을 루프 장치로 연결한다. (루프 장치란, 파일을 블록장치로 매핑한 pseudo-device를 일컫는다. 블록 장치이므로 포맷 후 원하는 디렉토리에 마운트하여 사용할 수 있다.  루프 장치를 루프백 장치라고도 부르는데, 루프백 장치는 네트워크 장치에서 사용하는 용어와 겹치므로 루프백 장치라고 부르면 안된다는 의견이 있으나, QNX Neutrino에서는 루프백 장치라는 용어를 사용한다)
# devb-loopback loopback blksz=512 fd=./VirtualDisk.img
# ls -l /dev/lo*
brw-------   1 root      root         9,   0 Dec 21 15:54 /dev/lo0
# df -P /dev/lo* 
Filesystem            512-blocks      Used Available Capacity  Mounted on      
/dev/lo0                    1024      1024         0     100%   

참고: 만일 리눅스에서 루프 장치를 만든다면 다음과 같이 해야 한다.
$ sudo losetup /dev/loop0 ./VirtualDisk.img

아래를 보면 Sector(Block Size)크기가 512 이며 1024개의 실린더로 생성 되었음을 알 수 있다.
# ls -l /dev/lo* 
brw-------   1 root      root         9,   0 Dec 21 15:59 /dev/lo0
# df -P /dev/lo0
Filesystem            512-blocks      Used Available Capacity  Mounted on      
/dev/lo0                    1024      1024         0     100%                  
# fdisk -z /dev/lo0

FDISK
Ignore Next Prev Change Delete Boot Unboot Restore Loader Save Quit

        _____OS_____     Start      End     ______Number_____    Size    Boot  
        name    type    Cylinder  Cylinder  Cylinders  Blocks                  

--> 1.  ______ (___)    _______   _______   _______   _________  _____
    2.  ______ (___)    _______   _______   _______   _________  _____
    3.  ______ (___)    _______   _______   _______   _________  _____
    4.  ______ (___)    _______   _______   _______   _________  _____


 Choose a partition by typing the partition number OR moving the pointer
 with the UP/DOWN arrows.
 Then, choose one of the actions on the top line of the screen.
          


Drive : /dev/lo0                    Config:     1 Heads
Size  : 0 Mbytes                                1 Sectors/track
Loader: None                                 1024 Cylinders
Blocks: 1024                                  512 Block Size

                                    Last cylinder is 1023

이전글 "디스크 파티션 분석"에서 QNX fdisk가 실린더 경계에서만 파티션 시작이 가능하여 MBR/VBR/EBR등이 위치한 실린더에 첫번째 섹터를 제외한 나머지 섹터들이 낭비되었는데, 위와 같이 실린더당 섹터가 하나씩만 가지도록 설정하면 이러한 낭비를 막을 수 있다. 물론 실제 물리 블록 장치의 경우 실린더당 섹터는 물리적으로 정해져 있으므로 낭비는 피할 수 없다. (참고: 리눅스의 fdisk는 섹터 단위로 파티션 위치를 설정할 수 있으므로 이러한 낭비가 발생하지 않는다. )

# mkdosfs /dev/lo0 

Format complete: FAT12 (4096-byte clusters), 492 kB available.

별로도 파티션을 만들지 않고 위와 같이 통째로 포맷을 하면, MBR없이 첫 섹터에 VBR이 생성되며 사용 가능한 상태가 된다. (물론 파티션을 나눌 수도 있다)
# mount -tdos /dev/lo0 /mnt/dos

# mount
/dev/hd0t179 on / type qnx6 
/dev/lo0 on /mnt/dos type dos (fat12) 

# df -P /mnt/dos
Filesystem            512-blocks      Used Available Capacity  Mounted on      
/dev/lo0                     984         0       984       0%  /mnt/dos/