파일에서 ".img"를 만드는 방법

파일에서 ".img"를 만드는 방법

".img" 파일 내의 일부 파일을 변경하려고 합니다.

예:

logo-x.squashfs.img
romfs-x.squashfs.img
safeEnv.img
sign.img

이를 위해 7-Zip을 사용하여 ".img"를 추출하고 필요한 사항을 변경했습니다. 하지만 이러한 변경된 파일을 7-Zip으로 보관하는 것은 불가능하므로 이를 수행하는 도구를 검색했지만 ".img"를 원래대로 생성할 수 있는 도구를 찾을 수 없었습니다.

ImgBurn을 사용해 보았는데 원본 파일과 다른 파일이 생성되는 것 같습니다. 또한 DD를 사용하려고 시도했지만 볼륨 대신 파일에서 작동하도록 만들 수 없습니다.

원본 ".img" 파일을 읽고 해당 형식을 알아보고 새 파일에서 새 파일을 만들려면 어떻게 해야 합니까?

답변1

7-Zip이 squashFS 이미지를 개별 파일로 변환할 수 있다는 것을 발견했지만 이를 수행하는 표준 도구는 아마도 다음과 같습니다 rdsquashfs.

# Unpack image `foo.img' into directory `foo':
rdsquashfs --unpack-root foo --unpack-path / foo.img

그런 다음 에서 파일을 변경한 후 foo다음을 사용하여 다시 압축할 수 있습니다 mksquashfs.

mksquashfs foo foo-updated.img

mksquashfs위와 같이 사용하면 원본 이미지 파일의 일부 메타데이터가 손실될 수 있다고 생각합니다 . 이것이 사용 사례에 중요한 경우 원본 이미지의 설명을 읽고 새 이미지를 생성할 때 이를 참조로 사용하는 것이 좋습니다.

# Unpack image `foo.img' into directory `foo':
rdsquashfs --unpack-root foo --unpack-path / foo.img
# Read description from image `foo.img' to file `foo.desc`:
rdsquashfs --describe foo.img >foo.desc

# Create image `foo-updated.img' from directory `foo' and description:
gensquashfs --pack-file foo.desc --pack-dir foo foo-updated.img

답변2

만약 그렇다면...

file logo-x.squashfs.img

그리고 또한...

sudo fdisk logo-x.squashfs.img

그런 다음 'p'를 사용하여 파티션 정보를 인쇄합니다. 그게 도움이 될 수 있어요.

또한 .img 파일을 마운트하고 필요한 파티션에 파일을 추가하는 것이 더 나을 수도 있습니까?

lsblk
sudo losetup --find logo-x.squashfs.img
lsblk

이제 .img 파일이 어느 장치 블록에 있는지 확인할 수 있습니다(예: /dev/loop6).

sudo mount /dev/loop6 /mnt

답변3

QEMU 머신을 생성한 다음 해당 이미지를 QEMU 머신에 로드하면 디스크로 표시됩니다. 해당 디스크의 파일을 마음대로 조작하면 디스크를 마운트 해제할 때 그대로 유지됩니다.

스쿼시 이미지의 경우 프로세스가 약간 다릅니다. 당신은스쿼시도구. 이것을 참조하십시오자세한 정보.

기본적으로 다음과 같습니다(squashfs 파일 시스템의 경우).

unsquashfs /live/image/livefs.squashfs
touch modified-this.file
mksquashfs squashfs-root/ livefs.squashfs -noappend -always-use-fragments

관련 정보