sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget(/translations/zh_CN/filesystems/squashfsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/filesystems/squashfsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/filesystems/squashfsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/filesystems/squashfsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/filesystems/squashfsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/filesystems/squashfsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhB/var/lib/git/docbuild/linux/Documentation/filesystems/squashfs.rsthKubhsection)}(hhh](htitle)}(hSquashfs 4.0 Filesystemh]hSquashfs 4.0 Filesystem}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(h8Squashfs is a compressed read-only filesystem for Linux.h]h8Squashfs is a compressed read-only filesystem for Linux.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(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).}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hSquashfs 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]hSquashfs 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.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hfMailing list (kernel code): linux-fsdevel@vger.kernel.org Web site: github.com/plougher/squashfs-toolsh](hMailing list (kernel code): }(hhhhhNhNubh reference)}(hlinux-fsdevel@vger.kernel.orgh]hlinux-fsdevel@vger.kernel.org}(hhhhhNhNubah}(h]h ]h"]h$]h&]refuri$mailto:linux-fsdevel@vger.kernel.orguh1hhhubh- Web site: github.com/plougher/squashfs-tools}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h1. Filesystem Featuresh]h1. Filesystem Features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h+Squashfs filesystem features versus Cramfs:h]h+Squashfs filesystem features versus Cramfs:}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jBhj?ubjC)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jBhj?ubjC)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jBhj?ubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h}(h]h ]h"]h$]h&]uh1jlhjiubjm)}(hhh]h}(h]h ]h"]h$]h&]uh1jlhjiubjm)}(hhh]h}(h]h ]h"]h$]h&]uh1jlhjiubeh}(h]h ]h"]h$]h&]uh1jghjdubah}(h]h ]h"]h$]h&]uh1jbhj?ubhtbody)}(hhh](jh)}(hhh](jm)}(hhh]h)}(hMax filesystem sizeh]hMax filesystem size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h2^64h]h2^64}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h256 MiBh]h256 MiB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(h Max file sizeh]h Max file size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h~ 2 TiBh]h~ 2 TiB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h16 MiBh]h16 MiB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(h Max filesh]h Max files}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hj9ubah}(h]h ]h"]h$]h&]uh1jlhj6ubjm)}(hhh]h)}(h unlimitedh]h unlimited}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjPubah}(h]h ]h"]h$]h&]uh1jlhj6ubjm)}(hhh]h)}(h unlimitedh]h unlimited}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjgubah}(h]h ]h"]h$]h&]uh1jlhj6ubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hMax directoriesh]hMax directories}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h unlimitedh]h unlimited}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h unlimitedh]h unlimited}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hMax entries per directoryh]hMax entries per directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h unlimitedh]h unlimited}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h unlimitedh]h unlimited}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hMax block sizeh]hMax block size}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hj#ubah}(h]h ]h"]h$]h&]uh1jlhj ubjm)}(hhh]h)}(h1 MiBh]h1 MiB}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hj:ubah}(h]h ]h"]h$]h&]uh1jlhj ubjm)}(hhh]h)}(h4 KiBh]h4 KiB}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjQubah}(h]h ]h"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hMetadata compressionh]hMetadata compression}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjqubah}(h]h ]h"]h$]h&]uh1jlhjnubjm)}(hhh]h)}(hyesh]hyes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjubah}(h]h ]h"]h$]h&]uh1jlhjnubjm)}(hhh]h)}(hnoh]hno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjubah}(h]h ]h"]h$]h&]uh1jlhjnubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hDirectory indexesh]hDirectory indexes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hyesh]hyes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hnoh]hno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hSparse file supporth]hSparse file support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hj ubah}(h]h ]h"]h$]h&]uh1jlhj ubjm)}(hhh]h)}(hyesh]hyes}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hj$ubah}(h]h ]h"]h$]h&]uh1jlhj ubjm)}(hhh]h)}(hnoh]hno}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hj;ubah}(h]h ]h"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hTail-end packing (fragments)h]hTail-end packing (fragments)}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hj[ubah}(h]h ]h"]h$]h&]uh1jlhjXubjm)}(hhh]h)}(hyesh]hyes}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjrubah}(h]h ]h"]h$]h&]uh1jlhjXubjm)}(hhh]h)}(hnoh]hno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjubah}(h]h ]h"]h$]h&]uh1jlhjXubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hExportable (NFS etc.)h]hExportable (NFS etc.)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hyesh]hyes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hnoh]hno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hHard link supporth]hHard link support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hyesh]hyes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hnoh]hno}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hj%ubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(h"." and ".." in readdirh]h“.” and “..” in readdir}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hjEubah}(h]h ]h"]h$]h&]uh1jlhjBubjm)}(hhh]h)}(hyesh]hyes}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hj\ubah}(h]h ]h"]h$]h&]uh1jlhjBubjm)}(hhh]h)}(hnoh]hno}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hjsubah}(h]h ]h"]h$]h&]uh1jlhjBubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hReal inode numbersh]hReal inode numbers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hyesh]hyes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hnoh]hno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(h32-bit uids/gidsh]h32-bit uids/gids}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hyesh]hyes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hnoh]hno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hFile creation timeh]hFile creation time}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj/ubah}(h]h ]h"]h$]h&]uh1jlhj,ubjm)}(hhh]h)}(hyesh]hyes}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjFubah}(h]h ]h"]h$]h&]uh1jlhj,ubjm)}(hhh]h)}(hnoh]hno}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj]ubah}(h]h ]h"]h$]h&]uh1jlhj,ubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(h Xattr supporth]h Xattr support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hj}ubah}(h]h ]h"]h$]h&]uh1jlhjzubjm)}(hhh]h)}(hyesh]hyes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjubah}(h]h ]h"]h$]h&]uh1jlhjzubjm)}(hhh]h)}(hnoh]hno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjubah}(h]h ]h"]h$]h&]uh1jlhjzubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(h ACL supporth]h ACL support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hnoh]hno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(hnoh]hno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]colsKuh1j=hj:ubah}(h]h ]h"]h$]h&]uh1j8hjhhhhhNubh)}(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)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjhhubeh}(h]filesystem-featuresah ]h"]1. filesystem featuresah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h2. Using Squashfsh]h2. Using Squashfs}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hhhhhK9ubh)}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hj?hhubeh}(h]using-squashfsah ]h"]2. using squashfsah$]h&]uh1hhhhhhhhK9ubh)}(hhh](h)}(h2.1 Mount optionsh]h2.1 Mount options}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhhhhhKBubj9)}(hhh]j>)}(hhh](jC)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jBhjzubjC)}(hhh]h}(h]h ]h"]h$]h&]colwidthK9uh1jBhjzubj)}(hhh](jh)}(hhh](jm)}(hhh]h)}(h errors=%sh]h errors=%s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh](h)}(h=Specify whether squashfs errors trigger a kernel panic or noth]h=Specify whether squashfs errors trigger a kernel panic or not}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhjubj9)}(hhh]j>)}(hhh](jC)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jBhjubjC)}(hhh]h}(h]h ]h"]h$]h&]colwidthK-uh1jBhjubj)}(hhh](jh)}(hhh](jm)}(hhh]h)}(hcontinueh]hcontinue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h&errors don't trigger a panic (default)h]h(errors don’t trigger a panic (default)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hpanich]hpanic}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh](h)}(htrigger a panic when errors are encountered, similar to several other filesystems (e.g. btrfs, ext4, f2fs, GFS2, jfs, ntfs, ubifs)h]htrigger a panic when errors are encountered, similar to several other filesystems (e.g. btrfs, ext4, f2fs, GFS2, jfs, ntfs, ubifs)}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhj-ubh)}(hYThis allows a kernel dump to be saved, useful for analyzing and debugging the corruption.h]hYThis allows a kernel dump to be saved, useful for analyzing and debugging the corruption.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKMhj-ubeh}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j=hjubah}(h]h ]h"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(h threads=%sh]h threads=%s}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjzubah}(h]h ]h"]h$]h&]uh1jlhjwubjm)}(hhh](h)}(h6Select the decompression mode or the number of threadsh]h6Select the decompression mode or the number of threads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjubh)}(h*If SQUASHFS_CHOICE_DECOMP_BY_MOUNT is set:h]h*If SQUASHFS_CHOICE_DECOMP_BY_MOUNT is set:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjubj9)}(hhh]j>)}(hhh](jC)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jBhjubjC)}(hhh]h}(h]h ]h"]h$]h&]colwidthK-uh1jBhjubj)}(hhh](jh)}(hhh](jm)}(hhh]h)}(hsingleh]hsingle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh](h)}(h+use single-threaded decompression (default)h]h+use single-threaded decompression (default)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhjubeh}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hmultih]hmulti}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hj ubah}(h]h ]h"]h$]h&]uh1jlhj ubjm)}(hhh](h)}(h-use up to two parallel decompressors per coreh]h-use up to two parallel decompressors per core}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hj, ubh)}(hIf 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]hIf 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.}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hj, ubeh}(h]h ]h"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(hpercpuh]hpercpu}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehjZ ubah}(h]h ]h"]h$]h&]uh1jlhjW ubjm)}(hhh](h)}(h*use a maximum of one decompressor per coreh]h*use a maximum of one decompressor per core}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehjq ubh)}(hSIt uses percpu variables to ensure decompression is load-balanced across the cores.h]hSIt uses percpu variables to ensure decompression is load-balanced across the cores.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKghjq ubeh}(h]h ]h"]h$]h&]uh1jlhjW ubeh}(h]h ]h"]h$]h&]uh1jghjubjh)}(hhh](jm)}(hhh]h)}(h 1|2|3|...h]h 1|2|3|...}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhj ubah}(h]h ]h"]h$]h&]uh1jlhj ubjm)}(hhh](h)}(h6configure the number of threads used for decompressionh]h6configure the number of threads used for decompression}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhj ubh)}(h)The upper limit is num_online_cpus() * 2.h]h)The upper limit is num_online_cpus() * 2.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhj ubeh}(h]h ]h"]h$]h&]uh1jlhj ubeh}(h]h ]h"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j=hjubah}(h]h ]h"]h$]h&]uh1j8hjubh)}(hxIf 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 hhhNhNubhstrong)}(h**not**h]hnot}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubhK set and SQUASHFS_DECOMP_MULTI, SQUASHFS_MOUNT_DECOMP_THREADS are both set:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKphjubj9)}(hhh]j>)}(hhh](jC)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jBhj ubjC)}(hhh]h}(h]h ]h"]h$]h&]colwidthK-uh1jBhj ubj)}(hhh]jh)}(hhh](jm)}(hhh]h)}(h2|3|...h]h2|3|...}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhj6 ubah}(h]h ]h"]h$]h&]uh1jlhj3 ubjm)}(hhh](h)}(h6configure the number of threads used for decompressionh]h6configure the number of threads used for decompression}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjM ubh)}(h)The upper limit is num_online_cpus() * 2.h]h)The upper limit is num_online_cpus() * 2.}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhjM ubeh}(h]h ]h"]h$]h&]uh1jlhj3 ubeh}(h]h ]h"]h$]h&]uh1jghj0 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]colsKuh1j=hj ubah}(h]h ]h"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]uh1jlhjwubeh}(h]h ]h"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]colsKuh1j=hjwubah}(h]h ]h"]h$]h&]uh1j8hjfhhhhhNubeh}(h] mount-optionsah ]h"]2.1 mount optionsah$]h&]uh1hhhhhhhhKBubh)}(hhh](h)}(h3. Squashfs Filesystem Designh]h3. Squashfs Filesystem Design}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhK~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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh 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&]hhuh1j hhhKhj hhubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]squashfs-filesystem-designah ]h"]3. squashfs filesystem designah$]h&]uh1hhhhhhhhK~ubh)}(hhh](h)}(h3.1 Compression optionsh]h3.1 Compression options}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hCompressors can optionally support compression specific options (e.g. dictionary size). If non-default compression options have been used, then these are stored here.h]hCompressors can optionally support compression specific options (e.g. dictionary size). If non-default compression options have been used, then these are stored here.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]compression-optionsah ]h"]3.1 compression optionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h 3.2 Inodesh]h 3.2 Inodes}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(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.}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(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 ().}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hTo 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]hTo maximise compression there are different inodes for each file type (regular file, directory, device, etc.), the inode contents and length varying with the type.}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hTo 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]hTo 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.}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]inodesah ]h"] 3.2 inodesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h3.3 Directoriesh]h3.3 Directories}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo hhhhhKubh)}(hLike 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]hLike 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjo hhubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjo hhubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjo hhubeh}(h] directoriesah ]h"]3.3 directoriesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h 3.4 File datah]h 3.4 File data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hRegular 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]hRegular 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hTo 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]hTo 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h] file-dataah ]h"] 3.4 file dataah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h3.5 Fragment lookup tableh]h3.5 Fragment lookup table}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]fragment-lookup-tableah ]h"]3.5 fragment lookup tableah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h3.6 Uid/gid lookup tableh]h3.6 Uid/gid lookup table}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(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.}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]uid-gid-lookup-tableah ]h"]3.6 uid/gid lookup tableah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h3.7 Export tableh]h3.7 Export table}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC hhhhhMubh)}(hXTo 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]hXTo 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.}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjC hhubh)}(hThis 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]hThis 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.}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjC hhubeh}(h] export-tableah ]h"]3.7 export tableah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h3.8 Xattr tableh]h3.8 Xattr table}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx hhhhhMubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjx hhubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM"hjx hhubeh}(h] xattr-tableah ]h"]3.8 xattr tableah$]h&]uh1hhhhhhhhMubh)}(hhh]h)}(h4. TODOs and Outstanding Issuesh]h4. TODOs and Outstanding Issues}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM)ubah}(h]todos-and-outstanding-issuesah ]h"]4. todos and outstanding issuesah$]h&]uh1hhhhhhhhM)ubh)}(hhh](h)}(h 4.1 TODO listh]h 4.1 TODO list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM,ubh)}(hImplement ACL support.h]hImplement ACL support.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM.hj hhubeh}(h] todo-listah ]h"] 4.1 todo listah$]h&]uh1hhhhhhhhM,ubh)}(hhh](h)}(h4.2 Squashfs Internal Cacheh]h4.2 Squashfs Internal Cache}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM1ubh)}(hBlocks in Squashfs are compressed. To avoid repeatedly decompressing recently accessed data Squashfs uses two small metadata and fragment caches.h]hBlocks in Squashfs are compressed. To avoid repeatedly decompressing recently accessed data Squashfs uses two small metadata and fragment caches.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM3hj hhubh)}(hXThe 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]hXThe 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM6hj hhubh)}(hIn 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]hIn 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM@hj hhubeh}(h]squashfs-internal-cacheah ]h"]4.2 squashfs internal cacheah$]h&]uh1hhhhhhhhM1ubeh}(h]squashfs-4-0-filesystemah ]h"]squashfs 4.0 filesystemah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjlfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjZ error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j5 j2 j<j9jcj`j j j j j j jl ji j j j j j j j@ j= ju jr j j j j j j j- j* u nametypes}(j5 j<jcj j j jl j j j j@ ju j j j j- uh}(j2 hj9jj`j?j jfj j j j ji j j jo j j j j j= j jr jC j jx j j j j j* j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.