€•wÅŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ(/translations/zh_CN/filesystems/squashfs”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/zh_TW/filesystems/squashfs”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/it_IT/filesystems/squashfs”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ja_JP/filesystems/squashfs”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ko_KR/filesystems/squashfs”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/pt_BR/filesystems/squashfs”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/sp_SP/filesystems/squashfs”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒB/var/lib/git/docbuild/linux/Documentation/filesystems/squashfs.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒSquashfs 4.0 Filesystem”h]”hŒSquashfs 4.0 Filesystem”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒ8Squashfs is a compressed read-only filesystem for Linux.”h]”hŒ8Squashfs is a compressed read-only filesystem for Linux.”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hXIt uses zlib, lz4, lzo, xz or zstd compression to compress files, inodes and directories. Inodes in the system are very small and all blocks are packed to minimise data overhead. Block sizes greater than 4K are supported up to a maximum of 1Mbytes (default block size 128K).”h]”hXIt uses zlib, lz4, lzo, xz or zstd compression to compress files, inodes and directories. Inodes in the system are very small and all blocks are packed to minimise data overhead. Block sizes greater than 4K are supported up to a maximum of 1Mbytes (default block size 128K).”…”�”}”(hhíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÞ)�”}”(hŒâSquashfs is intended for general read-only filesystem use, for archival use (i.e. in cases where a .tar.gz file may be used), and in constrained block device/memory systems (e.g. embedded systems) where low overhead is needed.”h]”hŒâSquashfs is intended for general read-only filesystem use, for archival use (i.e. in cases where a .tar.gz file may be used), and in constrained block device/memory systems (e.g. embedded systems) where low overhead is needed.”…”�”}”(hhûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hŒfMailing list (kernel code): linux-fsdevel@vger.kernel.org Web site: github.com/plougher/squashfs-tools”h]”(hŒMailing list (kernel code): ”…”�”}”(hj h²hh³Nh´NubhŒ reference”“”)�”}”(hŒlinux-fsdevel@vger.kernel.org”h]”hŒlinux-fsdevel@vger.kernel.org”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œ$mailto:linux-fsdevel@vger.kernel.org”uh1jhj ubhŒ- Web site: github.com/plougher/squashfs-tools”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ1. Filesystem Features”h]”hŒ1. Filesystem Features”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj-h²hh³hÇh´KubhÞ)�”}”(hŒ+Squashfs filesystem features versus Cramfs:”h]”hŒ+Squashfs filesystem features versus Cramfs:”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj-h²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jVhjSubjW)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jVhjSubjW)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jVhjSubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j€hj}ubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j€hj}ubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j€hj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjSubhŒtbody”“”)�”}”(hhh]”(j|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒMax filesystem size”h]”hŒMax filesystem size”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj®ubj�)�”}”(hhh]”hÞ)�”}”(hŒ2^64”h]”hŒ2^64”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj®ubj�)�”}”(hhh]”hÞ)�”}”(hŒ256 MiB”h]”hŒ256 MiB”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒ Max file size”h]”hŒ Max file size”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjüubj�)�”}”(hhh]”hÞ)�”}”(hŒ~ 2 TiB”h]”hŒ~ 2 TiB”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjüubj�)�”}”(hhh]”hÞ)�”}”(hŒ16 MiB”h]”hŒ16 MiB”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒ Max files”h]”hŒ Max files”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjJubj�)�”}”(hhh]”hÞ)�”}”(hŒ unlimited”h]”hŒ unlimited”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjJubj�)�”}”(hhh]”hÞ)�”}”(hŒ unlimited”h]”hŒ unlimited”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒMax directories”h]”hŒMax directories”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj˜ubj�)�”}”(hhh]”hÞ)�”}”(hŒ unlimited”h]”hŒ unlimited”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj˜ubj�)�”}”(hhh]”hÞ)�”}”(hŒ unlimited”h]”hŒ unlimited”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒMax entries per directory”h]”hŒMax entries per directory”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K"hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjæubj�)�”}”(hhh]”hÞ)�”}”(hŒ unlimited”h]”hŒ unlimited”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K"hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjæubj�)�”}”(hhh]”hÞ)�”}”(hŒ unlimited”h]”hŒ unlimited”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K"hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒMax block size”h]”hŒMax block size”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K#hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj4ubj�)�”}”(hhh]”hÞ)�”}”(hŒ1 MiB”h]”hŒ1 MiB”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K#hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj4ubj�)�”}”(hhh]”hÞ)�”}”(hŒ4 KiB”h]”hŒ4 KiB”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K#hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒMetadata compression”h]”hŒMetadata compression”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K$hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj‚ubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K$hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj‚ubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K$hj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒDirectory indexes”h]”hŒDirectory indexes”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K%hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÐubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K%hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÐubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K%hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒSparse file support”h]”hŒSparse file support”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K&hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K&hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K&hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒTail-end packing (fragments)”h]”hŒTail-end packing (fragments)”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K'hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjlubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K'hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjlubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K'hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒExportable (NFS etc.)”h]”hŒExportable (NFS etc.)”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K(hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjºubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K(hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjºubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K(hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒHard link support”h]”hŒHard link support”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K)hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K)hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K)hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒ"." and ".." in readdir”h]”hŒ“.â€� and “..â€� in readdir”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K*hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjVubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K*hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjVubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K*hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒReal inode numbers”h]”hŒReal inode numbers”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¤ubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¤ubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K+hjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒ32-bit uids/gids”h]”hŒ32-bit uids/gids”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K,hjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjòubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K,hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjòubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K,hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒFile creation time”h]”hŒFile creation time”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj@ubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj@ubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒ Xattr support”h]”hŒ Xattr support”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K.hj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjŽubj�)�”}”(hhh]”hÞ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K.hj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjŽubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K.hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒ ACL support”h]”hŒ ACL support”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÜubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÜubj�)�”}”(hhh]”hÞ)�”}”(hŒno”h]”hŒno”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©hjSubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jQhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj-h²hh³hÇh´NubhÞ)�”}”(hXLSquashfs compresses data, inodes and directories. In addition, inode and directory data are highly compacted, and packed on byte boundaries. Each compressed inode is on average 8 bytes in length (the exact length varies on file type, i.e. regular file, directory, symbolic link, and block/char device inodes have different sizes).”h]”hXLSquashfs compresses data, inodes and directories. In addition, inode and directory data are highly compacted, and packed on byte boundaries. Each compressed inode is on average 8 bytes in length (the exact length varies on file type, i.e. regular file, directory, symbolic link, and block/char device inodes have different sizes).”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K2hj-h²hubeh}”(h]”Œfilesystem-features”ah ]”h"]”Œ1. filesystem features”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ2. Using Squashfs”h]”hŒ2. Using Squashfs”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjSh²hh³hÇh´K9ubhÞ)�”}”(hXeAs squashfs is a read-only filesystem, the mksquashfs program must be used to create populated squashfs filesystems. This and other squashfs utilities are very likely packaged by your linux distribution (called squashfs-tools). The source code can be obtained from github.com/plougher/squashfs-tools. Usage instructions can also be obtained from this site.”h]”hXeAs squashfs is a read-only filesystem, the mksquashfs program must be used to create populated squashfs filesystems. This and other squashfs utilities are very likely packaged by your linux distribution (called squashfs-tools). The source code can be obtained from github.com/plougher/squashfs-tools. Usage instructions can also be obtained from this site.”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hjSh²hubeh}”(h]”Œusing-squashfs”ah ]”h"]”Œ2. using squashfs”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K9ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ2.1 Mount options”h]”hŒ2.1 Mount options”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjzh²hh³hÇh´KBubjM)�”}”(hhh]”jR)�”}”(hhh]”(jW)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jVhjŽubjW)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K9uh1jVhjŽubjª)�”}”(hhh]”(j|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒ errors=%s”h]”hŒ errors=%s”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KDhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¨ubj�)�”}”(hhh]”(hÞ)�”}”(hŒ=Specify whether squashfs errors trigger a kernel panic or not”h]”hŒ=Specify whether squashfs errors trigger a kernel panic or not”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KDhjÂubjM)�”}”(hhh]”jR)�”}”(hhh]”(jW)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jVhjÖubjW)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K-uh1jVhjÖubjª)�”}”(hhh]”(j|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒcontinue”h]”hŒcontinue”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KHhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjðubj�)�”}”(hhh]”hÞ)�”}”(hŒ&errors don't trigger a panic (default)”h]”hŒ(errors don’t trigger a panic (default)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KHhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hjíubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒpanic”h]”hŒpanic”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KIhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj'ubj�)�”}”(hhh]”(hÞ)�”}”(hŒ‚trigger a panic when errors are encountered, similar to several other filesystems (e.g. btrfs, ext4, f2fs, GFS2, jfs, ntfs, ubifs)”h]”hŒ‚trigger a panic when errors are encountered, similar to several other filesystems (e.g. btrfs, ext4, f2fs, GFS2, jfs, ntfs, ubifs)”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KIhjAubhÞ)�”}”(hŒYThis allows a kernel dump to be saved, useful for analyzing and debugging the corruption.”h]”hŒYThis allows a kernel dump to be saved, useful for analyzing and debugging the corruption.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KMhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©hjÖubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jQhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj¥ubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒ threads=%s”h]”hŒ threads=%s”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KQhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj‹ubj�)�”}”(hhh]”(hÞ)�”}”(hŒ6Select the decompression mode or the number of threads”h]”hŒ6Select the decompression mode or the number of threads”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KQhj¥ubhÞ)�”}”(hŒ*If SQUASHFS_CHOICE_DECOMP_BY_MOUNT is set:”h]”hŒ*If SQUASHFS_CHOICE_DECOMP_BY_MOUNT is set:”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KShj¥ubjM)�”}”(hhh]”jR)�”}”(hhh]”(jW)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jVhjÇubjW)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K-uh1jVhjÇubjª)�”}”(hhh]”(j|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒsingle”h]”hŒsingle”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KVhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjáubj�)�”}”(hhh]”(hÞ)�”}”(hŒ+use single-threaded decompression (default)”h]”hŒ+use single-threaded decompression (default)”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KVhjûubhÞ)�”}”(hXOnly one block (data or metadata) can be decompressed at any one time. This limits CPU and memory usage to a minimum, but it also gives poor performance on parallel I/O workloads when using multiple CPU machines due to waiting on decompressor availability.”h]”hXOnly one block (data or metadata) can be decompressed at any one time. This limits CPU and memory usage to a minimum, but it also gives poor performance on parallel I/O workloads when using multiple CPU machines due to waiting on decompressor availability.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KXhjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hjÞubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒmulti”h]”hŒmulti”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K^hj) ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj& ubj�)�”}”(hhh]”(hÞ)�”}”(hŒ-use up to two parallel decompressors per core”h]”hŒ-use up to two parallel decompressors per core”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K^hj@ ubhÞ)�”}”(hŒ·If you have a parallel I/O workload and your system has enough memory, using this option may improve overall I/O performance. It dynamically allocates decompressors on a demand basis.”h]”hŒ·If you have a parallel I/O workload and your system has enough memory, using this option may improve overall I/O performance. It dynamically allocates decompressors on a demand basis.”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K`hj@ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj& ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hjÞubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒpercpu”h]”hŒpercpu”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kehjn ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjk ubj�)�”}”(hhh]”(hÞ)�”}”(hŒ*use a maximum of one decompressor per core”h]”hŒ*use a maximum of one decompressor per core”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kehj… ubhÞ)�”}”(hŒSIt uses percpu variables to ensure decompression is load-balanced across the cores.”h]”hŒSIt uses percpu variables to ensure decompression is load-balanced across the cores.”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kghj… ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hjk ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hjÞubj|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒ 1|2|3|...”h]”hŒ 1|2|3|...”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kjhj³ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj° ubj�)�”}”(hhh]”(hÞ)�”}”(hŒ6configure the number of threads used for decompression”h]”hŒ6configure the number of threads used for decompression”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KjhjÊ ubhÞ)�”}”(hŒ)The upper limit is num_online_cpus() * 2.”h]”hŒ)The upper limit is num_online_cpus() * 2.”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KmhjÊ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj° ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©hjÇubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jQhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj¥ubhÞ)�”}”(hŒxIf SQUASHFS_CHOICE_DECOMP_BY_MOUNT is **not** set and SQUASHFS_DECOMP_MULTI, SQUASHFS_MOUNT_DECOMP_THREADS are both set:”h]”(hŒ&If SQUASHFS_CHOICE_DECOMP_BY_MOUNT is ”…”�”}”(hj h²hh³Nh´NubhŒstrong”“”)�”}”(hŒ**not**”h]”hŒnot”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhŒK set and SQUASHFS_DECOMP_MULTI, SQUASHFS_MOUNT_DECOMP_THREADS are both set:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kphj¥ubjM)�”}”(hhh]”jR)�”}”(hhh]”(jW)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jVhj- ubjW)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K-uh1jVhj- ubjª)�”}”(hhh]”j|)�”}”(hhh]”(j�)�”}”(hhh]”hÞ)�”}”(hŒ2|3|...”h]”hŒ2|3|...”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KuhjJ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjG ubj�)�”}”(hhh]”(hÞ)�”}”(hŒ6configure the number of threads used for decompression”h]”hŒ6configure the number of threads used for decompression”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kuhja ubhÞ)�”}”(hŒ)The upper limit is num_online_cpus() * 2.”h]”hŒ)The upper limit is num_online_cpus() * 2.”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kxhja ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hjG ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hjD ubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hj- ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jQhj* ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j{hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©hjŽubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jQhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjzh²hh³hÇh´Nubeh}”(h]”Œ mount-options”ah ]”h"]”Œ2.1 mount options”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KBubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ3. Squashfs Filesystem Design”h]”hŒ3. Squashfs Filesystem Design”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÆ h²hh³hÇh´K~ubhÞ)�”}”(hŒ`A squashfs filesystem consists of a maximum of nine parts, packed together on a byte alignment::”h]”hŒ_A squashfs filesystem consists of a maximum of nine parts, packed together on a byte alignment:”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K€hjÆ h²hubhŒ literal_block”“”)�”}”(hXÑ --------------- | superblock | |---------------| | compression | | options | |---------------| | datablocks | | & fragments | |---------------| | inode table | |---------------| | directory | | table | |---------------| | fragment | | table | |---------------| | export | | table | |---------------| | uid/gid | | lookup table | |---------------| | xattr | | table | ---------------”h]”hXÑ --------------- | superblock | |---------------| | compression | | options | |---------------| | datablocks | | & fragments | |---------------| | inode table | |---------------| | directory | | table | |---------------| | fragment | | table | |---------------| | export | | table | |---------------| | uid/gid | | lookup table | |---------------| | xattr | | table | ---------------”…”�”}”hjç sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jå h³hÇh´KƒhjÆ h²hubhÞ)�”}”(hXCompressed data blocks are written to the filesystem as files are read from the source directory, and checked for duplicates. Once all file data has been written the completed inode, directory, fragment, export, uid/gid lookup and xattr tables are written.”h]”hXCompressed data blocks are written to the filesystem as files are read from the source directory, and checked for duplicates. Once all file data has been written the completed inode, directory, fragment, export, uid/gid lookup and xattr tables are written.”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KžhjÆ h²hubeh}”(h]”Œsquashfs-filesystem-design”ah ]”h"]”Œ3. squashfs filesystem design”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K~ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ3.1 Compression options”h]”hŒ3.1 Compression options”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´K¤ubhÞ)�”}”(hŒ§Compressors can optionally support compression specific options (e.g. dictionary size). If non-default compression options have been used, then these are stored here.”h]”hŒ§Compressors can optionally support compression specific options (e.g. dictionary size). If non-default compression options have been used, then these are stored here.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¦hj h²hubeh}”(h]”Œcompression-options”ah ]”h"]”Œ3.1 compression options”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K¤ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ 3.2 Inodes”h]”hŒ 3.2 Inodes”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj2 h²hh³hÇh´K«ubhÞ)�”}”(hX(Metadata (inodes and directories) are compressed in 8Kbyte blocks. Each compressed block is prefixed by a two byte length, the top bit is set if the block is uncompressed. A block will be uncompressed if the -noI option is set, or if the compressed block was larger than the uncompressed block.”h]”hX(Metadata (inodes and directories) are compressed in 8Kbyte blocks. Each compressed block is prefixed by a two byte length, the top bit is set if the block is uncompressed. A block will be uncompressed if the -noI option is set, or if the compressed block was larger than the uncompressed block.”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K­hj2 h²hubhÞ)�”}”(hXMInodes are packed into the metadata blocks, and are not aligned to block boundaries, therefore inodes overlap compressed blocks. Inodes are identified by a 48-bit number which encodes the location of the compressed metadata block containing the inode, and the byte offset into that block where the inode is placed ().”h]”hXMInodes are packed into the metadata blocks, and are not aligned to block boundaries, therefore inodes overlap compressed blocks. Inodes are identified by a 48-bit number which encodes the location of the compressed metadata block containing the inode, and the byte offset into that block where the inode is placed ().”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K²hj2 h²hubhÞ)�”}”(hŒ£To maximise compression there are different inodes for each file type (regular file, directory, device, etc.), the inode contents and length varying with the type.”h]”hŒ£To maximise compression there are different inodes for each file type (regular file, directory, device, etc.), the inode contents and length varying with the type.”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¸hj2 h²hubhÞ)�”}”(hŒçTo further maximise compression, two types of regular file inode and directory inode are defined: inodes optimised for frequently occurring regular files and directories, and extended types where extra information has to be stored.”h]”hŒçTo further maximise compression, two types of regular file inode and directory inode are defined: inodes optimised for frequently occurring regular files and directories, and extended types where extra information has to be stored.”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¼hj2 h²hubeh}”(h]”Œinodes”ah ]”h"]”Œ 3.2 inodes”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K«ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ3.3 Directories”h]”hŒ3.3 Directories”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjƒ h²hh³hÇh´KÂubhÞ)�”}”(hŒûLike inodes, directories are packed into compressed metadata blocks, stored in a directory table. Directories are accessed using the start address of the metablock containing the directory and the offset into the decompressed block ().”h]”hŒûLike inodes, directories are packed into compressed metadata blocks, stored in a directory table. Directories are accessed using the start address of the metablock containing the directory and the offset into the decompressed block ().”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÄhjƒ h²hubhÞ)�”}”(hXtDirectories are organised in a slightly complex way, and are not simply a list of file names. The organisation takes advantage of the fact that (in most cases) the inodes of the files will be in the same compressed metadata block, and therefore, can share the start block. Directories are therefore organised in a two level list, a directory header containing the shared start block value, and a sequence of directory entries, each of which share the shared start block. A new directory header is written once/if the inode start block changes. The directory header/directory entry list is repeated as many times as necessary.”h]”hXtDirectories are organised in a slightly complex way, and are not simply a list of file names. The organisation takes advantage of the fact that (in most cases) the inodes of the files will be in the same compressed metadata block, and therefore, can share the start block. Directories are therefore organised in a two level list, a directory header containing the shared start block value, and a sequence of directory entries, each of which share the shared start block. A new directory header is written once/if the inode start block changes. The directory header/directory entry list is repeated as many times as necessary.”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÉhjƒ h²hubhÞ)�”}”(hXDirectories are sorted, and can contain a directory index to speed up file lookup. Directory indexes store one entry per metablock, each entry storing the index/filename mapping to the first directory header in each metadata block. Directories are sorted in alphabetical order, and at lookup the index is scanned linearly looking for the first filename alphabetically larger than the filename being looked up. At this point the location of the metadata block the filename is in has been found. The general idea of the index is to ensure only one metadata block needs to be decompressed to do a lookup irrespective of the length of the directory. This scheme has the advantage that it doesn't require extra memory overhead and doesn't require much extra storage on disk.”h]”hXDirectories are sorted, and can contain a directory index to speed up file lookup. Directory indexes store one entry per metablock, each entry storing the index/filename mapping to the first directory header in each metadata block. Directories are sorted in alphabetical order, and at lookup the index is scanned linearly looking for the first filename alphabetically larger than the filename being looked up. At this point the location of the metadata block the filename is in has been found. The general idea of the index is to ensure only one metadata block needs to be decompressed to do a lookup irrespective of the length of the directory. This scheme has the advantage that it doesn’t require extra memory overhead and doesn’t require much extra storage on disk.”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÓhjƒ h²hubeh}”(h]”Œ directories”ah ]”h"]”Œ3.3 directories”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KÂubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ 3.4 File data”h]”hŒ 3.4 File data”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÆ h²hh³hÇh´KàubhÞ)�”}”(hŒãRegular files consist of a sequence of contiguous compressed blocks, and/or a compressed fragment block (tail-end packed block). The compressed size of each datablock is stored in a block list contained within the file inode.”h]”hŒãRegular files consist of a sequence of contiguous compressed blocks, and/or a compressed fragment block (tail-end packed block). The compressed size of each datablock is stored in a block list contained within the file inode.”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KâhjÆ h²hubhÞ)�”}”(hŒ¾To speed up access to datablocks when reading 'large' files (256 Mbytes or larger), the code implements an index cache that caches the mapping from block index to datablock location on disk.”h]”hŒÂTo speed up access to datablocks when reading ‘large’ files (256 Mbytes or larger), the code implements an index cache that caches the mapping from block index to datablock location on disk.”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KçhjÆ h²hubhÞ)�”}”(hXsThe index cache allows Squashfs to handle large files (up to 1.75 TiB) while retaining a simple and space-efficient block list on disk. The cache is split into slots, caching up to eight 224 GiB files (128 KiB blocks). Larger files use multiple slots, with 1.75 TiB files using all 8 slots. The index cache is designed to be memory efficient, and by default uses 16 KiB.”h]”hXsThe index cache allows Squashfs to handle large files (up to 1.75 TiB) while retaining a simple and space-efficient block list on disk. The cache is split into slots, caching up to eight 224 GiB files (128 KiB blocks). Larger files use multiple slots, with 1.75 TiB files using all 8 slots. The index cache is designed to be memory efficient, and by default uses 16 KiB.”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KëhjÆ h²hubeh}”(h]”Œ file-data”ah ]”h"]”Œ 3.4 file data”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KàubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ3.5 Fragment lookup table”h]”hŒ3.5 Fragment lookup table”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´KóubhÞ)�”}”(hX{Regular files can contain a fragment index which is mapped to a fragment location on disk and compressed size using a fragment lookup table. This fragment lookup table is itself stored compressed into metadata blocks. A second index table is used to locate these. This second index table for speed of access (and because it is small) is read at mount time and cached in memory.”h]”hX{Regular files can contain a fragment index which is mapped to a fragment location on disk and compressed size using a fragment lookup table. This fragment lookup table is itself stored compressed into metadata blocks. A second index table is used to locate these. This second index table for speed of access (and because it is small) is read at mount time and cached in memory.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kõhj h²hubeh}”(h]”Œfragment-lookup-table”ah ]”h"]”Œ3.5 fragment lookup table”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KóubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ3.6 Uid/gid lookup table”h]”hŒ3.6 Uid/gid lookup table”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj0 h²hh³hÇh´KýubhÞ)�”}”(hXYFor space efficiency regular files store uid and gid indexes, which are converted to 32-bit uids/gids using an id look up table. This table is stored compressed into metadata blocks. A second index table is used to locate these. This second index table for speed of access (and because it is small) is read at mount time and cached in memory.”h]”hXYFor space efficiency regular files store uid and gid indexes, which are converted to 32-bit uids/gids using an id look up table. This table is stored compressed into metadata blocks. A second index table is used to locate these. This second index table for speed of access (and because it is small) is read at mount time and cached in memory.”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kÿhj0 h²hubeh}”(h]”Œuid-gid-lookup-table”ah ]”h"]”Œ3.6 uid/gid lookup table”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KýubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ3.7 Export table”h]”hŒ3.7 Export table”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjW h²hh³hÇh´MubhÞ)�”}”(hX†To enable Squashfs filesystems to be exportable (via NFS etc.) filesystems can optionally (disabled with the -no-exports Mksquashfs option) contain an inode number to inode disk location lookup table. This is required to enable Squashfs to map inode numbers passed in filehandles to the inode location on disk, which is necessary when the export code reinstantiates expired/flushed inodes.”h]”hX†To enable Squashfs filesystems to be exportable (via NFS etc.) filesystems can optionally (disabled with the -no-exports Mksquashfs option) contain an inode number to inode disk location lookup table. This is required to enable Squashfs to map inode numbers passed in filehandles to the inode location on disk, which is necessary when the export code reinstantiates expired/flushed inodes.”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjW h²hubhÞ)�”}”(hŒ×This table is stored compressed into metadata blocks. A second index table is used to locate these. This second index table for speed of access (and because it is small) is read at mount time and cached in memory.”h]”hŒ×This table is stored compressed into metadata blocks. A second index table is used to locate these. This second index table for speed of access (and because it is small) is read at mount time and cached in memory.”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjW h²hubeh}”(h]”Œ export-table”ah ]”h"]”Œ3.7 export table”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´MubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ3.8 Xattr table”h]”hŒ3.8 Xattr table”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjŒ h²hh³hÇh´MubhÞ)�”}”(hXThe xattr table contains extended attributes for each inode. The xattrs for each inode are stored in a list, each list entry containing a type, name and value field. The type field encodes the xattr prefix ("user.", "trusted." etc) and it also encodes how the name/value fields should be interpreted. Currently the type indicates whether the value is stored inline (in which case the value field contains the xattr value), or if it is stored out of line (in which case the value field stores a reference to where the actual value is stored). This allows large values to be stored out of line improving scanning and lookup performance and it also allows values to be de-duplicated, the value being stored once, and all other occurrences holding an out of line reference to that value.”h]”hXThe xattr table contains extended attributes for each inode. The xattrs for each inode are stored in a list, each list entry containing a type, name and value field. The type field encodes the xattr prefix (“user.â€�, “trusted.â€� etc) and it also encodes how the name/value fields should be interpreted. Currently the type indicates whether the value is stored inline (in which case the value field contains the xattr value), or if it is stored out of line (in which case the value field stores a reference to where the actual value is stored). This allows large values to be stored out of line improving scanning and lookup performance and it also allows values to be de-duplicated, the value being stored once, and all other occurrences holding an out of line reference to that value.”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjŒ h²hubhÞ)�”}”(hX*The xattr lists are packed into compressed 8K metadata blocks. To reduce overhead in inodes, rather than storing the on-disk location of the xattr list inside each inode, a 32-bit xattr id is stored. This xattr id is mapped into the location of the xattr list using a second xattr id lookup table.”h]”hX*The xattr lists are packed into compressed 8K metadata blocks. To reduce overhead in inodes, rather than storing the on-disk location of the xattr list inside each inode, a 32-bit xattr id is stored. This xattr id is mapped into the location of the xattr list using a second xattr id lookup table.”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M"hjŒ h²hubeh}”(h]”Œ xattr-table”ah ]”h"]”Œ3.8 xattr table”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´MubhÉ)�”}”(hhh]”hÎ)�”}”(hŒ4. TODOs and Outstanding Issues”h]”hŒ4. TODOs and Outstanding Issues”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÁ h²hh³hÇh´M)ubah}”(h]”Œtodos-and-outstanding-issues”ah ]”h"]”Œ4. todos and outstanding issues”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M)ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ 4.1 TODO list”h]”hŒ 4.1 TODO list”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÚ h²hh³hÇh´M,ubhÞ)�”}”(hŒImplement ACL support.”h]”hŒImplement ACL support.”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M.hjÚ h²hubeh}”(h]”Œ todo-list”ah ]”h"]”Œ 4.1 todo list”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M,ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ4.2 Squashfs Internal Cache”h]”hŒ4.2 Squashfs Internal Cache”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´M1ubhÞ)�”}”(hŒ’Blocks in Squashfs are compressed. To avoid repeatedly decompressing recently accessed data Squashfs uses two small metadata and fragment caches.”h]”hŒ’Blocks in Squashfs are compressed. To avoid repeatedly decompressing recently accessed data Squashfs uses two small metadata and fragment caches.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M3hj h²hubhÞ)�”}”(hX¶The cache is not used for file datablocks, these are decompressed and cached in the page-cache in the normal way. The cache is used to temporarily cache fragment and metadata blocks which have been read as a result of a metadata (i.e. inode or directory) or fragment access. Because metadata and fragments are packed together into blocks (to gain greater compression) the read of a particular piece of metadata or fragment will retrieve other metadata/fragments which have been packed with it, these because of locality-of-reference may be read in the near future. Temporarily caching them ensures they are available for near future access without requiring an additional read and decompress.”h]”hX¶The cache is not used for file datablocks, these are decompressed and cached in the page-cache in the normal way. The cache is used to temporarily cache fragment and metadata blocks which have been read as a result of a metadata (i.e. inode or directory) or fragment access. Because metadata and fragments are packed together into blocks (to gain greater compression) the read of a particular piece of metadata or fragment will retrieve other metadata/fragments which have been packed with it, these because of locality-of-reference may be read in the near future. Temporarily caching them ensures they are available for near future access without requiring an additional read and decompress.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M6hj h²hubhÞ)�”}”(hŒüIn the future this internal cache may be replaced with an implementation which uses the kernel page cache. Because the page cache operates on page sized units this may introduce additional complexity in terms of locking and associated race conditions.”h]”hŒüIn the future this internal cache may be replaced with an implementation which uses the kernel page cache. Because the page cache operates on page sized units this may introduce additional complexity in terms of locking and associated race conditions.”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M@hj h²hubeh}”(h]”Œsquashfs-internal-cache”ah ]”h"]”Œ4.2 squashfs internal cache”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M1ubeh}”(h]”Œsquashfs-4-0-filesystem”ah ]”h"]”Œsquashfs 4.0 filesystem”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”j€Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jn Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jI jF jPjMjwjtjà jÀ j j j/ j, j€ j} jà jÀ j j j- j* jT jQ j‰ j† j¾ j» j× jÔ jþ jû jA j> uŒ nametypes”}”(jI ‰jP‰jw‰jà ‰j ‰j/ ‰j€ ‰jà ‰j ‰j- ‰jT ‰j‰ ‰j¾ ‰j× ‰jþ ‰jA ‰uh}”(jF hÊjMj-jtjSjÀ jzj jÆ j, j j} j2 jÀ jƒ j jÆ j* j jQ j0 j† jW j» jŒ jÔ jÁ jû jÚ j> j uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.