€•¢DŒ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/omfs”Œ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/omfs”Œ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/omfs”Œ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/omfs”Œ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/omfs”Œ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/omfs”Œ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/omfs”Œ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³Œ>/var/lib/git/docbuild/linux/Documentation/filesystems/omfs.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ Optimized MPEG Filesystem (OMFS)”h]”hŒ Optimized MPEG Filesystem (OMFS)”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒOverview”h]”hŒOverview”…”�”}”(hhàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÝh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hXOMFS is a filesystem created by SonicBlue for use in the ReplayTV DVR and Rio Karma MP3 player. The filesystem is extent-based, utilizing block sizes from 2k to 8k, with hash-based directories. This filesystem driver may be used to read and write disks from these devices.”h]”hXOMFS is a filesystem created by SonicBlue for use in the ReplayTV DVR and Rio Karma MP3 player. The filesystem is extent-based, utilizing block sizes from 2k to 8k, with hash-based directories. This filesystem driver may be used to read and write disks from these devices.”…”�”}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubhï)�”}”(hŒ¬Note, it is not recommended that this FS be used in place of a general filesystem for your own streaming media device. Native Linux filesystems will likely perform better.”h]”hŒ¬Note, it is not recommended that this FS be used in place of a general filesystem for your own streaming media device. Native Linux filesystems will likely perform better.”…”�”}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhï)�”}”(hŒ!More information is available at:”h]”hŒ!More information is available at:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhŒ block_quote”“”)�”}”(hŒhttp://linux-karma.sf.net/ ”h]”hï)�”}”(hŒhttp://linux-karma.sf.net/”h]”hŒ reference”“”)�”}”(hj"h]”hŒhttp://linux-karma.sf.net/”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j"uh1j$hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KhhÝh²hubhï)�”}”(hŒZVarious utilities, including mkomfs and omfsck, are included with omfsprogs, available at:”h]”hŒZVarious utilities, including mkomfs and omfsck, are included with omfsprogs, available at:”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubj)�”}”(hŒhttps://bobcopeland.com/karma/ ”h]”hï)�”}”(hŒhttps://bobcopeland.com/karma/”h]”j%)�”}”(hjTh]”hŒhttps://bobcopeland.com/karma/”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jTuh1j$hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KhhÝh²hubhï)�”}”(hŒ(Instructions are included in its README.”h]”hŒ(Instructions are included in its README.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒOptions”h]”hŒOptions”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj†h²hh³hÇh´K ubhï)�”}”(hŒ/OMFS supports the following mount-time options:”h]”hŒ/OMFS supports the following mount-time options:”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K"hj†h²hubj)�”}”(hXb============ ======================================== uid=n make all files owned by specified user gid=n make all files owned by specified group umask=xxx set permission umask to xxx fmask=xxx set umask to xxx for files dmask=xxx set umask to xxx for directories ============ ======================================== ”h]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1j³hj°ubj´)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K(uh1j³hj°ubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hï)�”}”(hŒuid=n”h]”hŒuid=n”…”�”}”(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Œ&make all files owned by specified user”h]”hŒ&make all files owned by specified user”…”�”}”(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Œgid=n”h]”hŒgid=n”…”�”}”(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Œ'make all files owned by specified group”h]”hŒ'make all files owned by specified group”…”�”}”(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Œ umask=xxx”h]”hŒ umask=xxx”…”�”}”(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Œset permission umask to xxx”h]”hŒset permission umask to xxx”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K'hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjËubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hï)�”}”(hŒ fmask=xxx”h]”hŒ fmask=xxx”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K(hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjwubjÔ)�”}”(hhh]”hï)�”}”(hŒset umask to xxx for files”h]”hŒset umask to xxx for files”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K(hj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjËubjÏ)�”}”(hhh]”(jÔ)�”}”(hhh]”hï)�”}”(hŒ dmask=xxx”h]”hŒ dmask=xxx”…”�”}”(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Œ set umask to xxx for directories”h]”hŒ set umask to xxx for 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®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj°ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j®hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j©hj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´K$hj†h²hubeh}”(h]”Œoptions”ah ]”h"]”Œoptions”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Disk format”h]”hŒ Disk format”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K-ubhï)�”}”(hXÔOMFS discriminates between "sysblocks" and normal data blocks. The sysblock group consists of super block information, file metadata, directory structures, and extents. Each sysblock has a header containing CRCs of the entire sysblock, and may be mirrored in successive blocks on the disk. A sysblock may have a smaller size than a data block, but since they are both addressed by the same 64-bit block number, any remaining space in the smaller sysblock is unused.”h]”hXØOMFS discriminates between “sysblocksâ€� and normal data blocks. The sysblock group consists of super block information, file metadata, directory structures, and extents. Each sysblock has a header containing CRCs of the entire sysblock, and may be mirrored in successive blocks on the disk. A sysblock may have a smaller size than a data block, but since they are both addressed by the same 64-bit block number, any remaining space in the smaller sysblock is unused.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K/hjh²hubhï)�”}”(hŒSysblock header information::”h]”hŒSysblock header information:”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K7hjh²hubhŒ literal_block”“”)�”}”(hX2struct omfs_header { __be64 h_self; /* FS block where this is located */ __be32 h_body_size; /* size of useful data after header */ __be16 h_crc; /* crc-ccitt of body_size bytes */ char h_fill1[2]; u8 h_version; /* version, always 1 */ char h_type; /* OMFS_INODE_X */ u8 h_magic; /* OMFS_IMAGIC */ u8 h_check_xor; /* XOR of header bytes before this */ __be32 h_fill2; };”h]”hX2struct omfs_header { __be64 h_self; /* FS block where this is located */ __be32 h_body_size; /* size of useful data after header */ __be16 h_crc; /* crc-ccitt of body_size bytes */ char h_fill1[2]; u8 h_version; /* version, always 1 */ char h_type; /* OMFS_INODE_X */ u8 h_magic; /* OMFS_IMAGIC */ u8 h_check_xor; /* XOR of header bytes before this */ __be32 h_fill2; };”…”�”}”hj5sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j3h³hÇh´K9hjh²hubhï)�”}”(hŒ:Files and directories are both represented by omfs_inode::”h]”hŒ9Files and directories are both represented by omfs_inode:”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KEhjh²hubj4)�”}”(hX)struct omfs_inode { struct omfs_header i_head; /* header */ __be64 i_parent; /* parent containing this inode */ __be64 i_sibling; /* next inode in hash bucket */ __be64 i_ctime; /* ctime, in milliseconds */ char i_fill1[35]; char i_type; /* OMFS_[DIR,FILE] */ __be32 i_fill2; char i_fill3[64]; char i_name[OMFS_NAMELEN]; /* filename */ __be64 i_size; /* size of file, in bytes */ };”h]”hX)struct omfs_inode { struct omfs_header i_head; /* header */ __be64 i_parent; /* parent containing this inode */ __be64 i_sibling; /* next inode in hash bucket */ __be64 i_ctime; /* ctime, in milliseconds */ char i_fill1[35]; char i_type; /* OMFS_[DIR,FILE] */ __be32 i_fill2; char i_fill3[64]; char i_name[OMFS_NAMELEN]; /* filename */ __be64 i_size; /* size of file, in bytes */ };”…”�”}”hjQsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j3h³hÇh´KGhjh²hubhï)�”}”(hXCDirectories in OMFS are implemented as a large hash table. Filenames are hashed then prepended into the bucket list beginning at OMFS_DIR_START. Lookup requires hashing the filename, then seeking across i_sibling pointers until a match is found on i_name. Empty buckets are represented by block pointers with all-1s (~0).”h]”hXCDirectories in OMFS are implemented as a large hash table. Filenames are hashed then prepended into the bucket list beginning at OMFS_DIR_START. Lookup requires hashing the filename, then seeking across i_sibling pointers until a match is found on i_name. Empty buckets are represented by block pointers with all-1s (~0).”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KThjh²hubhï)�”}”(hŒ^A file is an omfs_inode structure followed by an extent table beginning at OMFS_EXTENT_START::”h]”hŒ]A file is an omfs_inode structure followed by an extent table beginning at OMFS_EXTENT_START:”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KZhjh²hubj4)�”}”(hXÏstruct omfs_extent_entry { __be64 e_cluster; /* start location of a set of blocks */ __be64 e_blocks; /* number of blocks after e_cluster */ }; struct omfs_extent { __be64 e_next; /* next extent table location */ __be32 e_extent_count; /* total # extents in this table */ __be32 e_fill; struct omfs_extent_entry e_entry; /* start of extent entries */ };”h]”hXÏstruct omfs_extent_entry { __be64 e_cluster; /* start location of a set of blocks */ __be64 e_blocks; /* number of blocks after e_cluster */ }; struct omfs_extent { __be64 e_next; /* next extent table location */ __be32 e_extent_count; /* total # extents in this table */ __be32 e_fill; struct omfs_extent_entry e_entry; /* start of extent entries */ };”…”�”}”hj{sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j3h³hÇh´K]hjh²hubhï)�”}”(hŒðEach extent holds the block offset followed by number of blocks allocated to the extent. The final extent in each table is a terminator with e_cluster being ~0 and e_blocks being ones'-complement of the total number of blocks in the table.”h]”hŒòEach extent holds the block offset followed by number of blocks allocated to the extent. The final extent in each table is a terminator with e_cluster being ~0 and e_blocks being ones’-complement of the total number of blocks in the table.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kihjh²hubhï)�”}”(hŒ‘If this table overflows, a continuation inode is written and pointed to by e_next. These have a header but lack the rest of the inode structure.”h]”hŒ‘If this table overflows, a continuation inode is written and pointed to by e_next. These have a header but lack the rest of the inode structure.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Knhjh²hubeh}”(h]”Œ disk-format”ah ]”h"]”Œ disk format”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K-ubeh}”(h]”Œoptimized-mpeg-filesystem-omfs”ah ]”h"]”Œ optimized mpeg filesystem (omfs)”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”j׌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”}”(j²j¯jƒj€jjjªj§uŒ nametypes”}”(j²‰jƒ‰j‰jª‰uh}”(j¯hÊj€hÝjj†j§juŒ 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.