sqfs2tar - turn a SquashFS image into a tar archive
sqfs2tar [OPTIONS...] <sqfsfile>
Quickly and painlessly turn a SquashFS filesystem image into a tar archive that can then be examined and processed by any tool that can work on tar archives. The resulting archive is written to stdout.
- --compressor, -c <name>
- By default the result is a raw, uncompressed tar ball. Using this option
it is possible to select a stream compression format (such as gzip,
xz, zstd or bzip2) to use for the output archive.
Run sqfs2tar --help to get a list of all available compressors.
- --root-becomes, -r <dir>
- Prefix all paths in the tarball with the given directory name and add an
entry for this directory that receives all meta data (permissions,
ownership, extended attributes, et cetera) of the root inode.
The special value . can be used since many tar archivers themselves pack the attributes of the root directory that way and naturally support this.
If this option is not used, all meta data from the root inode IS LOST!
- --subdir, -d <dir>
- Unpack the given sub directory instead of the filesystem root. Can be specified more than once to select multiple directories. If only one is specified, it becomes the new root of the archive filesystem tree.
- --keep-as-dir, -k
- If --subdir is used only once, don't make the subdir the archive root, instead keep it as prefix for all unpacked files. Using --subdir more than once implies --keep-as-dir.
- --no-xattr, -X
- Discard extended attributes from the SquashFS image. The default behavior is to copy all xattrs attached to SquashFS inodes into the resulting tar archive.
- --no-hard-links, -L
- Normally, sqfs2tar runs hard link detection and generates hard links for entries that refer to the same inode. If this flag is set, hard link detection is not performed and duplicate data records are generated instead.
- --no-skip, -s
- Abort if a file cannot be stored in a tar archive. For instance, the tar format does not support socket files, but SquashFS does. The default behaviour of sqfs2tar is to emit a warning to stderr and skip the entry. If this flag is set, processing is aborted and sqfs2tar exits with an error status.
- --help, -h
- Print help text and exit.
- --version, -V
- Print version information and exit.
The output format is pre-POSIX ustar using GNU extensions where necessary. Experimentation determined that this is most widely supported by activeley used tar implementations (besides GNU tar), even more than the newer POSIX format with PAX extensions.
If any file or directory is encountered that cannot be converted, it is skipped and a warning is written to stderr. Unless the --no-skip option is set, which aborts processing if a file cannot be converted.
This mainly affects socket files which are supported by SquashFS but not by POSIX tar, GNU tar or PAX.
Since the tar format contains a sequence of files with absolute names, it has no direct concept of a tree or an unnamed root node. Consequently, meta data from the SquashFS root inode is lost, unless the --root-becomes option is used.
The output archive can optionally be compressed. Default settings are used for the supported compressors and there is currently no intention to expose finer grained control over them. To set custom compressor flags, create an uncompressed archive and pipe it into a dedicated compressor process.
Turn a SquashFS image into a tar archive:
- sqfs2tar rootfs.sqfs > rootfs.tar
- sqfs2tar --compressor gzip rootfs.sqfs > rootfs.tar.gz
- sqfs2tar rootfs.sqfs | xz -9e > rootfs.tar.xz
Written by David Oberhollenzer.
Copyright © 2019 David Oberhollenzer License GPLv3+: GNU
GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.