".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