** 이글루스(2017/10/12 21:52)에 있던 글.
이런 내용이 있었단 사실을 정말이지, 까맣게 잊고 있었다.
왜 이런 일을 했는지는 다른 글에서 얘기하기로 하고.
디스크 드라이브(Flash Drive, SSD, HDD 를 막론하고)를 dd 명령으로 이미지를 뜨면, image 파일이 생성된다. 확장자야 dd 명령을 줄 때 임의로 줄 수 있으니 의미가 없고, 어쨌든, dd if 를 받아, of 로 생성한 파일을 어떻게 열어볼 수 있을까? 이게 이 글의 논점이다.
물론, 다시 이 파일을 디스크에 쓰면(역시 dd 로), 고스란히 동일한 내용을 얻을 수 있다. 그게 dd 의 목적이기도 하다.
그러나.. 새로 디스크에 쓰지 않아도 파일을 열어볼 수 있지 않을까? 게다가 압축(이미지)을 풀지 않고도?
‘모든 것은 파일이다. Everything is a File.’
이 문구를 다시 한번 떠올릴 수 있게 해줬다. 뭐가? 오늘 이 사건이.
이미지 파일이 abcd.img 라고 가정한다.
이 파일은 Flash Drive 를 통째로, dd 명령을 사용해서 만들었다. 따라서, 이 파일은 Flash Drive 와 전혀 다를게 없다.
다를 게 없다는 얘기는, 이런 명령이 가능하단 거다.
$ fdisk -l abcd.img
??? 파일에 fdisk 를???
결과는 이렇다.
$ fdisk -l ./abcd.imgDisk ./abcd.img: 14.9 GiB, 16021192704 bytes, 31291392 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0x28e86720Device Boot Start End Sectors Size Id Type./abcd.img1 2048 31277055 31275008 14.9G 83 Linux
몰랐다. 정말. fdisk 를 실행할 때도 장치를 ‘파일’형식으로 지정하니까 (dev/sda 등) 저렇게 직접 파일로 할 수도 있다고 짐작이라도 할 수 있었을 듯 한데.. 생각도 못했다.
저 정보를 보자면, abcd.img 안에는 파티션이 하나(abcd.img1)가 있고, 2048 바이트에서 시작하고 있다.
그렇다면 이 파티션을 마운트 할 수도 있다는 얘기가 되는데.. 어떻게?
다음 글을 참고했다. (정말 고맙습니다.)
마운트를 하기 위해선 /dev/sda1 과 같이 장치명을 줘야 하는데, 여기선 장치명은 나타낼 수가 없다. abcd.img1
은 장치명/파일명이 아니다. fdisk 가 편의상 그렇게 표기를 했을 뿐이다.
대신, 디스크 이미지의 어느 위치에서 파티션이 시작하는 지는 알 수 있다.
Start 는 2048 Sector 이고, 한 섹터 크기는 512 bytes 라고 위 정보에 나와있다. 따라서, 정확히 2048*512(1,048,576)에서부터 첫번째 파티션이 시작된다. 이것을 명령으로 바꾸면 이런 형식이 된다.
$ sudo mount -o loop,offset=1048576 abcd.img /mnt
멋집니다. ^^
좀 더 IT人 스럽게 바꾸면,
$ sudo mount -o loop,offset=$((2048*512)) abcd.img /mnt
만약 파티션이 2개 이상 있더라도, 파티션 시작점만 알고 있으면 저 형식에 맞게끔 변환해 넣으면 마운트를 할 수 있을 것 같다. (이건 해보지 않아서 모르겠지만, 아마도 되지 않을까.)
또 하나, 정말 크게 배웠다.