jbd2

package
v0.0.0-...-c13b09f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 28, 2019 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

View Source
const (
	JbtfDataMatchesMagicBytes = uint16(0x1) // On-disk block is escaped. The first four bytes of the data block just happened to match the jbd2 magic number.
	JbtfSameUuidAsPrevious    = uint16(0x2) // This block has the same UUID as previous, therefore the UUID field is omitted.
	JbtfDeleted               = uint16(0x4) // The data block was deleted by the transaction. (Not used?)
	JbtfLastTag               = uint16(0x8) // This is the last tag in this descriptor block.
)

Descriptor block tag record flags.

View Source
const (
	JournalBlockHeaderMagicBytes = uint32(0xc03b3998)
	JournalHeaderSize            = 12
)
View Source
const (
	BtDescriptor            = uint32(1) // Descriptor. This block precedes a series of data blocks that were written through the journal during a transaction.
	BtBlockCommitRecord     = uint32(2) // Block commit record. This block signifies the completion of a transaction.
	BtJournalSuperblockV1   = uint32(3) // Journal superblock, v1.
	BtJournalSuperblockV2   = uint32(4) // Journal superblock, v2.
	BtBlockRevocationRecord = uint32(5) // Block revocation records. This speeds up recovery by enabling the journal to skip writing blocks that were subsequently rewritten.
)

Block types

View Source
const (
	// JBD2_FEATURE_INCOMPAT_REVOKE
	JsbFeatureIncompatRevoke = uint32(0x1) // Journal has block revocation records.

	// JBD2_FEATURE_INCOMPAT_64BIT
	JsbFeatureIncompat64bit = uint32(0x2) // Journal can deal with 64-bit block numbers.

	// JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT
	JsbFeatureIncompatAsyncCommit = uint32(0x4) // Journal commits asynchronously.

	// JBD2_FEATURE_INCOMPAT_CSUM_V2
	JsbFeatureIncompatCsumV2 = uint32(0x8) // This journal uses v2 of the checksum on-disk format. Each journal metadata block gets its own checksum, and the block tags in the descriptor table contain checksums for each of the data blocks in the journal.

	// JBD2_FEATURE_INCOMPAT_CSUM_V3
	JsbFeatureIncompatCsumV3 = uint32(0x10) // This journal uses v3 of the checksum on-disk format. This is the same as v2, but the journal block tag size is fixed regardless of the size of block numbers.
)

Journal superblock "incomp" features.

View Source
const (
	JccCrc32  = uint8(1)
	JccMd5    = uint8(2)
	JccSha1   = uint8(3)
	JccCrc32c = uint8(4)
)

Journal checksum codes

View Source
const (
	// JBD2_CHECKSUM_BYTES
	Jbd2ChecksumBytes = 8
)
View Source
const (
	// JBD2_FEATURE_COMPAT_CHECKSUM
	JsbFeatureCompatChecksum = uint32(0x1)
)

Journal superblock "compat" features.

Variables

View Source
var (
	BlocktypeLookup = map[uint32]string{
		BtDescriptor:            "descriptor",
		BtBlockCommitRecord:     "block commit record",
		BtJournalSuperblockV1:   "journal superblock v1",
		BtJournalSuperblockV2:   "journal superblock v2",
		BtBlockRevocationRecord: "block revocation record",
	}
)
View Source
var (
	JsbFeatureCompatLookup = map[uint32]string{
		JsbFeatureCompatChecksum: "checksum",
	}
)
View Source
var (
	JsbFeatureIncompatLookup = map[uint32]string{
		JsbFeatureIncompatRevoke:      "revoke",
		JsbFeatureIncompat64bit:       "64bit",
		JsbFeatureIncompatAsyncCommit: "asynccommit",
		JsbFeatureIncompatCsumV2:      "csumv2",
		JsbFeatureIncompatCsumV3:      "csumv3",
	}
)

Functions

func DumpBytes

func DumpBytes(data []byte)

func GetJournalInode

func GetJournalInode(filepath string) (f *os.File, inode *ext4.Inode, err error)

GetJournalInode returns inode and file structs. It's the responsibility of the caller to close it.

func ReadExactly

func ReadExactly(r io.Reader, buffer []byte) (err error)

Types

type JournalBlock

type JournalBlock interface {
	Type() uint32
	String() string
	Header() *JournalHeader
}

type JournalBlockTag32NoCsumV3

type JournalBlockTag32NoCsumV3 struct {
	// 0x0
	TBlocknr uint32 // Lower 32-bits of the location of where the corresponding data block should end up on disk.

	// 0x4
	TChecksum uint16 // Checksum of the journal UUID, the sequence number, and the data block. Note that only the lower 16 bits are stored.

	// 0x6
	TFlags uint16 // Flags that go with the descriptor. See the table jbd2_tag_flags for more info.

	// 0x8 or 0xC
	// This field appears to be open coded. It always comes at the end of the tag, after t_flags or t_blocknr_high. This field is not present if the “same UUID” flag is set.
	Uuid [16]byte //  A UUID to go with this tag. This field appears to be copied from the j_uuid field in struct journal_s, but only tune2fs touches that field.
}

JournalBlockTag32NoCsumV3 (journal_block_tag_s struct) is a subelement of the descriptor block.

func (*JournalBlockTag32NoCsumV3) String

func (jbtnc3 *JournalBlockTag32NoCsumV3) String() string

type JournalCommitBlock

type JournalCommitBlock struct {
	JournalCommonBlockType
	// contains filtered or unexported fields
}

func (*JournalCommitBlock) CommitTime

func (jcb *JournalCommitBlock) CommitTime() time.Time

func (*JournalCommitBlock) Data

func (*JournalCommitBlock) String

func (jcb *JournalCommitBlock) String() string

func (*JournalCommitBlock) Type

func (*JournalCommitBlock) Type() uint32

type JournalCommitBlockData

type JournalCommitBlockData struct {
	// 0xC
	HChksumType uint8 // The type of checksum to use to verify the integrity of the data blocks in the transaction. See jbd2_checksum_type for more info.

	// 0xD
	HChksumSize uint8 // The number of bytes used by the checksum. Most likely 4.

	// 0xE
	HPadding [2]byte

	// 0x10
	HChksum [Jbd2ChecksumBytes]uint32 // 32 bytes of space to store checksums. If JBD2_FEATURE_INCOMPAT_CSUM_V2 or JBD2_FEATURE_INCOMPAT_CSUM_V3 are set, the first __be32 is the checksum of the journal UUID and the entire commit block, with this field zeroed. If JBD2_FEATURE_COMPAT_CHECKSUM is set, the first __be32 is the crc32 of all the blocks already written to the transaction.

	// 0x30
	HCommitSec uint64 // The time that the transaction was committed, in seconds since the epoch.

	// 0x38
	HCommitNsec uint32 // Nanoseconds component of the above timestamp.
}

JournalCommitBlock (commit_header struct) indicates that a transaction has been completely written to the journal.

type JournalCommonBlockType

type JournalCommonBlockType struct {
	// contains filtered or unexported fields
}

func (*JournalCommonBlockType) Header

func (jcbt *JournalCommonBlockType) Header() *JournalHeader

func (*JournalCommonBlockType) SetHeader

func (jcbt *JournalCommonBlockType) SetHeader(jh *JournalHeader)

type JournalDescriptorBlock

type JournalDescriptorBlock struct {
	Tags []JournalBlockTag32NoCsumV3

	JournalCommonBlockType
	// contains filtered or unexported fields
}

JournalDescriptorBlock is a top-level journal block-type that describes where the data is supposed to go on disk.

func (*JournalDescriptorBlock) Dump

func (jdb *JournalDescriptorBlock) Dump()

func (*JournalDescriptorBlock) SetTransactionData

func (jdb *JournalDescriptorBlock) SetTransactionData(transactionData []byte)

func (*JournalDescriptorBlock) String

func (jdb *JournalDescriptorBlock) String() string

func (*JournalDescriptorBlock) Type

type JournalHeader

type JournalHeader struct {
	HMagic     uint32
	HBlocktype uint32
	HSequence  uint32
}

JournalHeader (journal_header_s) is at the beginning of every block.

func (*JournalHeader) Dump

func (jh *JournalHeader) Dump()

func (JournalHeader) String

func (jh JournalHeader) String() string

type JournalRevokeBlock

type JournalRevokeBlock struct {
	JournalCommonBlockType
	// contains filtered or unexported fields
}

func (*JournalRevokeBlock) Data

func (*JournalRevokeBlock) String

func (jrb *JournalRevokeBlock) String() string

func (*JournalRevokeBlock) Type

func (*JournalRevokeBlock) Type() uint32

type JournalRevokeBlock32Data

type JournalRevokeBlock32Data struct {
	// 0xC
	RCount uint32 // Number of bytes used in this block.

	// 0x10
	Blocks []uint32 // Blocks to revoke.
}

JournalRevokeBlock32Data (jbd2_journal_revoke_header_s struct) is top-level journal block-type.

type JournalSuperblock

type JournalSuperblock struct {
	// contains filtered or unexported fields
}

func NewJournalSuperblock

func NewJournalSuperblock(r io.Reader) (jsb *JournalSuperblock, err error)

func (*JournalSuperblock) Data

func (*JournalSuperblock) Dump

func (jsb *JournalSuperblock) Dump()

func (*JournalSuperblock) DumpFeatures

func (jsb *JournalSuperblock) DumpFeatures(includeFalses bool)

func (*JournalSuperblock) HasCompatibleFeature

func (jsb *JournalSuperblock) HasCompatibleFeature(mask uint32) bool

func (*JournalSuperblock) HasIncompatibleFeature

func (jsb *JournalSuperblock) HasIncompatibleFeature(mask uint32) bool

func (*JournalSuperblock) NextBlock

func (jsb *JournalSuperblock) NextBlock(r io.Reader) (jb JournalBlock, err error)

type JournalSuperblockData

type JournalSuperblockData struct {
	/* 0x0000 */
	SHeader JournalHeader

	/* 0x000C */
	/* Static information describing the journal */
	SBlocksize uint32 /* journal device blocksize */
	SMaxlen    uint32 /* total blocks in journal file */
	SFirst     uint32 /* first block of log information */

	/* 0x0018 */
	/* Dynamic information describing the current state of the log */
	SSequence uint32 /* first commit ID expected in log */
	SStart    uint32 /* blocknr of start of log */

	/* 0x0020 */
	/* Error value, as set by jbd2_journal_abort(). */
	SErrno uint32

	/* 0x0024 */
	/* Remaining fields are only valid in a version-2 superblock */
	SFeatureCompat   uint32 /* compatible feature set */
	SFeatureIncompat uint32 /* incompatible feature set */
	SFeatureRoCompat uint32 /* readonly-compatible feature set */

	/* 0x0030 */
	SUuid [16]uint8 /* 128-bit uuid for journal */

	/* 0x0040 */
	SNrUsers uint32 /* Nr of filesystems sharing log */

	SDynsuper uint32 /* Blocknr of dynamic superblock copy*/

	/* 0x0048 */
	SMaxTransaction uint32 /* Limit of journal blocks per trans.*/
	SMaxTransData   uint32 /* Limit of data blocks per trans. */

	/* 0x0050 */
	SChecksumType uint8 /* checksum type */
	SPadding2     [3]uint8
	SPadding      [42]uint32
	SChecksum     uint32 /* crc32c(superblock) */

	/* 0x0100 */
	SUsers [16 * 48]uint8 /* ids of all fs'es sharing the log */

}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL