<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
	<title>HJL's posts</title>
	<link>https://hujiale.me</link>
	<description>Truth is defined but never discovered.</description>
	<language>en-us</language>

	
	
	<item>
	  <title>Autumn Moon on the Tama River</title>
	  <link>https://hujiale.me/autumn-moon-on-the-tama-river.html</link>
	  <pubDate>Sun, 20 Apr 2025 02:46:40 &#43;0800</pubDate>
	  <guid>https://hujiale.me/autumn-moon-on-the-tama-river.html</guid>
	  <description>Size: 26.</description>
	  <content:encoded>&lt;pre&gt;&lt;code&gt;Size: 26.0cm by 39.5cm (10.24 in by 15.55 in)
Designer: Ando Hiroshige
Era: Post-war
Printer: Ogawa / Carver: Hotta
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Description: The Tama River ran along the western border of Edo, while the Sumida River flowed through the east side of the city. The Tama tended to evoke
poetic associations, such as with the desolate Musashino moor and the autumnal moon. The poem reads: &amp;quot;I shall never get tired of looking at the moon tonight;
the mountains are bound together under the brilliant moonlight.&amp;quot;&lt;/p&gt;
&lt;p&gt;A striking image from Hiroshige’s Edo kinko hakkei (&amp;quot;Eight Views of the Suburbs of Edo&amp;quot;) series. A post-war reproduction from the O-Edo Mokuhan-sha Company.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;autumn_moon_on_the_tama_river_1.jpeg&#34; alt=&#34;&#34; /&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&#34;autumn_moon_on_the_tama_river_2.jpeg&#34; alt=&#34;&#34; /&gt;
&lt;/figure&gt;
</content:encoded>
	</item>
	
	
	
	<item>
	  <title>Linux filesystem(ext4), inode and blocks</title>
	  <link>https://hujiale.me/linux-filesystem-inode-block.html</link>
	  <pubDate>Sat, 22 Feb 2025 14:51:39 &#43;0200</pubDate>
	  <guid>https://hujiale.me/linux-filesystem-inode-block.html</guid>
	  <description>Data structureFieldDescriptionblock grouppartition consists of multiple block groupsblock group 0a little bit special.</description>
	  <content:encoded>&lt;h1 id=&#34;data-structure&#34;&gt;Data structure&lt;/h1&gt;
&lt;figure&gt;
&lt;img src=&#34;filesystem_inode_block.excalidraw.png&#34; alt=&#34;filesystem_inode_block&#34; title=&#34;filesystem_inode_block&#34; /&gt;
&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;block group&lt;/td&gt;
&lt;td&gt;partition consists of multiple block groups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;block group 0&lt;/td&gt;
&lt;td&gt;a little bit special. first 1024 bytes are reserved for boot sector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;super block (sb)&lt;/td&gt;
&lt;td&gt;is a record of the characteristics of a filesystem. primary superblock is in block group 0 whose number is power of 1,3,5,7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;group descriptor&lt;/td&gt;
&lt;td&gt;records the location of block bitmap and inode bitmap. counter for free blocks and inodes. number of directories.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;block bitmap&lt;/td&gt;
&lt;td&gt;each bit represents block. max size is 8*4096(block size)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inode&lt;/td&gt;
&lt;td&gt;index nodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inode table&lt;/td&gt;
&lt;td&gt;array of inodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inode bitmap&lt;/td&gt;
&lt;td&gt;each bit represents a inode in inodetable. max size is 8*4096(block size)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;commands&#34;&gt;Commands&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;dumpe2fs(8) - retrieve filesystem information&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;&#34;&gt;&lt;code&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo dumpe2fs -h /dev/nvme0n1p4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem OS type: Linux
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inode count: 24453120
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Block count: 97792081
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Reserved block count: 4889604
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Overhead clusters: 1814658
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Free blocks: 81687378
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Free inodes: 23866982
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;First block: 0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Block size: 4096
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Fragment size: 4096
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Group descriptor size: 64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Reserved GDT blocks: 1024
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Blocks per group: 32768
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Fragments per group: 32768
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inodes per group: 8192
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inode blocks per group: 512
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;dumpe2fs(8) - where is primary and backup superblocks (1,3,5,7,...)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;&#34;&gt;&lt;code&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo dumpe2fs /dev/nvme0n1p4 | grep -B 1 -i superblock
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dumpe2fs 1.47.2 (1-Jan-2025)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Group 0: (Blocks 0-32767) csum 0x6bd4 [ITABLE_ZEROED]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Primary superblock at 0, Group descriptors at 1-47
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Group 1: (Blocks 32768-65535) csum 0xab1c [ITABLE_ZEROED]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Backup superblock at 32768, Group descriptors at 32769-32815
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Group 3: (Blocks 98304-131071) csum 0x992a [ITABLE_ZEROED]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Backup superblock at 98304, Group descriptors at 98305-98351
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Group 5: (Blocks 163840-196607) csum 0x8083 [ITABLE_ZEROED]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Backup superblock at 163840, Group descriptors at 163841-163887
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Group 7: (Blocks 229376-262143) csum 0x84c7 [ITABLE_ZEROED]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Backup superblock at 229376, Group descriptors at 229377-229423
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;tune2fs(8) - modify filesystem parameters&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;&#34;&gt;&lt;code&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo tune2fs -l /dev/nvmen01p4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tune2fs 1.47.2 (1-Jan-2025)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem volume name:   endeavouros
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Last mounted on:          /sysroot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem UUID:          9b6cd942-2a06-48b1-b9fb-cf00862cb5d0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem magic number:  0xEF53
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem revision &lt;span style=&#34;font-style:italic&#34;&gt;#:    1 (dynamic)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem features:      has_journal ext_attr resize_inode dir_index orphan_file filetype needs_recovery extent 64bit flex_bg metadata_csum_seed sparse_super large_file huge_file dir_nlink extra_isize metadata_csum orphan_present
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem flags:         signed_directory_hash
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Default mount options:    user_xattr acl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem state:         clean
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Errors behavior:          Continue
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem OS type:       Linux
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inode count:              24453120
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Block count:              97792081
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Reserved block count:     4889604
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Overhead clusters:        1814658
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Free blocks:              81687378
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Free inodes:              23866982
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;First block:              0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Block size:               4096
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Fragment size:            4096
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Group descriptor size:    64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Reserved GDT blocks:      1024
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Blocks per group:         32768
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Fragments per group:      32768
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inodes per group:         8192
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inode blocks per group:   512
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Flex block group size:    16
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem created:       Mon Nov 27 02:07:25 2023
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Last mount time:          Sun Feb 16 04:23:30 2025
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Last write time:          Sun Feb 23 23:39:58 2025
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mount count:              32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Maximum mount count:      -1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Last checked:             Tue Dec 31 14:40:33 2024
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Check interval:           0 (&amp;lt;none&amp;gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Lifetime writes:          1030 GB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Reserved blocks uid:      0 (user root)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Reserved blocks gid:      0 (group root)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;First inode:              11
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inode size:               256
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Required extra isize:     32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Desired extra isize:      32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Journal inode:            8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Default directory hash:   half_md4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Directory Hash Seed:      de0781a2-b353-41ab-9a47-2cfdaefb0ec8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Journal backup:           inode blocks
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Checksum type:            crc32c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Checksum:                 0xb125b965
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Checksum seed:            0x0bc9aa60
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Orphan file inode:        12
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;stat(1) - print file or file system status&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;stat calculates &amp;quot;Blocks&amp;quot; based on virtual block(512 bytes), that&#39;s why you see 24 blocks below.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;&#34;&gt;&lt;code&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ stat -fc &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;%n type=%T freeblk=%f totalblk=%b blksz=%S&amp;#34;&lt;/span&gt; /root
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/root type=ext2/ext3 freeblk=81921201 totalblk=95977423 blksz=4096
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ dd &lt;span style=&#34;font-weight:bold&#34;&gt;if&lt;/span&gt;=/dev/urandom of=a count=3 bs=4096
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ stat a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File: a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Size: 12288       Blocks: 24         IO Block: 4096   regular file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Device: 259,4   Inode: 21644642    Links: 1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Access: (0644/-rw-r--r--)  Uid: ( 1000/     hjl)   Gid: ( 1000/     hjl)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Access: 2025-04-19 23:19:07.283020996 &#43;0800
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Modify: 2025-04-19 23:20:00.730320206 &#43;0800
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Change: 2025-04-19 23:20:00.730320206 &#43;0800
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Birth: 2025-04-19 23:19:07.283020996 &#43;0800&lt;span style=&#34;font-style:italic&#34;&gt;```&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;ls(1) - list file and directory inode&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;&#34;&gt;&lt;code&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ dd &lt;span style=&#34;font-weight:bold&#34;&gt;if&lt;/span&gt;=/dev/urandom of=a count=3 bs=4096
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ls -i a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;21644642 a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mkdir b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ls -id .
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;21657519 .
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ls -id b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;21774445 b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ls -lia b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;total 8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;21774445 drwxr-xr-x 2 hjl hjl 4096 Apr 20 03:18 .
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;21657519 drwxr-xr-x 3 hjl hjl 4096 Apr 20 03:18 ..
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;df(1) - filesystem space usage&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;&#34;&gt;&lt;code&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ df /dev/nvme0n1p4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem     1K-blocks     Used Available Use% Mounted on
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/nvme0n1p4 383909692 59225448 305109444  17% /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ df -B 4096 /dev/nvme0n1p4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem     4K-blocks     Used Available Use% Mounted on
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/nvme0n1p4  95977423 14806327  76277396  17% /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;blockdev(8) - block device ioctls&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;from &amp;quot;EXTENTS&amp;quot; we can see file a occupies 3 blocks&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;&#34;&gt;&lt;code&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo blockdev --getbsz /dev/nvme0n1p4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;4096
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ dd &lt;span style=&#34;font-weight:bold&#34;&gt;if&lt;/span&gt;=/dev/urandom of=a count=3 bs=4096
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ls -i a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;21644642 a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo debugfs -R &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;stat &amp;lt;21644642&amp;gt;&amp;#34;&lt;/span&gt; /dev/nvme0n1p4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;debugfs 1.47.2 (1-Jan-2025)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inode: 21644642   Type: regular    Mode:  0644   Flags: 0x80000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Generation: 1360945917    Version: 0x00000000:00000009
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User:  1000   Group:  1000   Project:     0   Size: 12288
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;File ACL: 0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Links: 1   Blockcount: 24
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Fragment:  Address: 0    Number: 0    Size: 0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ctime: 0x6803bf20:ae1f3538 -- Sat Apr 19 23:20:00 2025
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; atime: 0x6803beeb:437a3b10 -- Sat Apr 19 23:19:07 2025
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; mtime: 0x6803bf20:ae1f3538 -- Sat Apr 19 23:20:00 2025
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crtime: 0x6803beeb:437a3b10 -- Sat Apr 19 23:19:07 2025
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Size of extra inode fields: 32
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inode checksum: 0x44c771d9
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;EXTENTS:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(0-2):5850527-5850529
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;reference&#34;&gt;Reference&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.kernel.org/doc/html/v6.13/filesystems/ext4/overview.html#layout&#34;&gt;https://www.kernel.org/doc/html/v6.13/filesystems/ext4/overview.html#layout&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.kernel.org/doc/html/v6.13/filesystems/ext4/dynamic.html#dynamic-structures&#34;&gt;https://www.kernel.org/doc/html/v6.13/filesystems/ext4/dynamic.html#dynamic-structures&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded>
	</item>
	
	
	
	<item>
	  <title>Story of TTY and PTS</title>
	  <link>https://hujiale.me/story-of-tty-and-pts.html</link>
	  <pubDate>Sun, 09 Feb 2025 01:45:35 &#43;0800</pubDate>
	  <guid>https://hujiale.me/story-of-tty-and-pts.html</guid>
	  <description>A little bit backgroudAs a Linux user, I am using terminal every day.</description>
	  <content:encoded>&lt;h1 id=&#34;a-little-bit-backgroud&#34;&gt;A little bit backgroud&lt;/h1&gt;
&lt;p&gt;As a Linux user, I am using terminal every day. One day I find the term &amp;quot;terminal&amp;quot; should be precisely named as &amp;quot;terminal emulator&amp;quot;, I decide to dig more into
the mystery of TTY. TTY stands for teletype and it has a long history all the way back to 1800s even before ASCII was invented. It was introduced into UNIX in
1900s for multiple users to talk to the operating system. By then the physical teletype is equipped with ticker tape (for input) and the paper printer (for
output). It was gradually evolved to hardware emulated teletype. CRT and keyboard was made to replace paper printer and ticker tape. Now days keyboard and
monitor are equipped with every Laptop and PC. People use software emulated terminal to talk to kernel or applications. But the legacy from the old cast-iron is
till lurking beneath the surface. How kernel treats physical teletype and software emulated teletype doesn&#39;t vary as much as hardware evolves.&lt;/p&gt;
&lt;h1 id=&#34;physical-teletype&#34;&gt;Physical teletype&lt;/h1&gt;
&lt;p&gt;Ken Thompson developped UNIX on PDP7 with it.&lt;/p&gt;
&lt;p&gt;Teletype Model 33
&lt;img src=&#34;https://upload.wikimedia.org/wikipedia/commons/thumb/3/33/Teletype-IMG_7287.jpg/1920px-Teletype-IMG_7287.jpg&#34; alt=&#34;Teletype model 33&#34; title=&#34;teletype model 33&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;hardware-emulated-teletype&#34;&gt;Hardware emulated teletype&lt;/h1&gt;
&lt;p&gt;DEC VT05&lt;br /&gt;
&lt;img src=&#34;https://terminals-wiki.org/wiki/images/thumb/9/9e/VT05.jpg/1920px-VT05.jpg&#34; alt=&#34;DEV VT05&#34; title=&#34;vt05&#34; /&gt;&lt;/p&gt;
&lt;p&gt;DEC VT100&lt;br /&gt;
&lt;img src=&#34;https://upload.wikimedia.org/wikipedia/commons/6/6f/Terminal-dec-vt100.jpg&#34; alt=&#34;DEC VT100&#34; title=&#34;vt100&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;software-emulated-teletype&#34;&gt;Software emulated teletype&lt;/h1&gt;
&lt;p&gt;Now days physical and hardware emulated teletypes are practically kept in computer museum. People install software emulated terminal in graphical desktop
environment to manage day to day jobs. Some well known software terminal emulators: urxvt, xterm, konsole, iterm2, st, kitty. In modern UNIX or Linux distros,
mutiple software emulated terminal processes can run concurrently by a single user or multiple users, but all of them are attached to same tty (&lt;code&gt;who(1)&lt;/code&gt;) which
usually assigned for graphical desktop environment. How to distinguish different terminal processes as a logical tty? Here comes PTS - pseudo-teletypes. In
Linux there is a master multiplexor &lt;code&gt;ptmx(4) /dev/ptmx&lt;/code&gt; manages all master PTM slave PTS &lt;code&gt;/dev/pts/*&lt;/code&gt; pair. The slave PTS number can be checked with &lt;code&gt;tty&lt;/code&gt;
command.&lt;/p&gt;
&lt;h1 id=&#34;io-control-commands&#34;&gt;IO control commands&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;termios(3)&lt;/code&gt;, &lt;code&gt;tty_ioctl(4)&lt;/code&gt;, &lt;code&gt;stty(1)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Print TTY device setting&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;&#34;&gt;&lt;code&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ stty -a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;speed 38400 baud; rows 75; columns 254; line = 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;intr = ^C; quit = ^&lt;span style=&#34;font-weight:bold;font-style:italic&#34;&gt;\;&lt;/span&gt; erase = ^?; kill = ^U; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; swtch = &amp;lt;undef&amp;gt;; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Current PTS&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;&#34;&gt;&lt;code&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tty
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/pts/1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ who
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hjl      tty1         2025-02-09 13:18
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tty -s &amp;amp;&amp;amp; echo &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;In a tty&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;In a tty
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;interesting-reading&#34;&gt;Interesting reading&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linusakesson.net/programming/tty/&#34;&gt;https://www.linusakesson.net/programming/tty/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded>
	</item>
	
	
  </channel>
</rss>
