social.mikutter.hachune.netMastodonを使った分散型ソーシャルネットワークの一部です。
#あなたがガチ凍結されると<br> 11月中旬くらいかな?俺はておくれだから<br> Twitterからよく舐められるんだけど、<br> ある時Twitterが度が過ぎて俺を凍結<br> してきたわけ、そんで記憶がないんだけど(痴呆)、<br> 相当ボコボコにしちゃったらしい<br> 俺、これでもておくれですよ?

サーバーの情報

107
人のアクティブユーザー

もっと詳しく

Izumi Tsutsui

Ext2 の謎 その1
- Ext2 の先頭の 1024バイトは(おそらくブートローダ用に)予約されていて空きになっている
- Ext2 のブロックサイズは 1024バイトの場合と 4096バイトの場合が存在する(少なくとも実装上は)

■ここで発生する疑問
- Ext2 で実際のデータ(実態としては superblock)は何ブロック目から始まるの?

■コードから導き出された答え
- ブロックサイズが 1024バイトの場合は 2ブロック目から始まる
- ブロックサイズが 4096バイトの場合は 1ブロック目のオフセット 1024バイト目から始まる

「は?」(という思いの詰まったコメント)
nxr.netbsd.org/xref/src/sbin/n
「めんどくせぇ」(という思いの詰まったコメント)
nxr.netbsd.org/xref/src/sbin/n

nxr.netbsd.orgCross Reference: /src/sbin/newfs_ext2fs/mke2fs.c

Ext2 の謎 その2
- Ext2 にはいわゆる resize の機能があって、既存の FSのサイズの拡大・縮小が可能という仕様がある
- しかしこの resize の仕様は先ほど論文には一切出てこない

■ここで発生する疑問
- ファイルシステムを拡大する場合、管理用の領域も増やす必要がある。それは後から増やすのは困難なので、事前に管理領域(DOSでいう FAT的領域)を、ファイルシステム作成時点で将来の拡大に備えて予約しておく必要がある
- ここで、領域予約の方法は「ファイルシステム拡張をサポートしない古いシステムでも解釈できる記述」にする必要があるが、実際どうやってるの?
→これを記載した文書は無い

■実装から導き出された答え
「ここに書くには余白が足りない」
nxr.netbsd.org/xref/src/sbin/n

nxr.netbsd.orgCross Reference: /src/sbin/newfs_ext2fs/mke2fs.c

Ext2 の謎 その3
- その2で書いた resize の予約領域をどうにかして確保したとして、その領域を管理する inode を用意する必要がある
- inode は雑に書くと「その領域を使ってるのはファイルなのかディレクトリなのかそれ以外の何かなのか」という情報と、実際に使っているブロックの情報を持つ領域

■ここで発生する疑問
- inode にはファイルとかディレクトリとかを示す属性を表すビットがあるのだけれど、resize用予約領域はどういう属性を指定するの?

■実装から導き出された答え
e2fsprogsのリリースノート「とあるリサイズツールが RESIZEINO ってのを使ってたからそれを使えるようにするやで」
実装してた私「」

このネタでなおたさんがSDに記事を書いてくれる日を待つか( 'ー`)

NetBSD用に BSD License な newfs_ext2fs などというものを書いたのは「CobaltのようなLinux用アプライアンスのファームウェアは起動方法が『Ext2 からファイルを読み込む』なので Ext2 が作れないと NetBSD のインストールが(単独で)できない」という理由なので、resize の仕様を実装する必要性はまったくなかったのだけれど、実装にあたって Ext2 の仕様を確認していたら resize の仕様が謎すぎるあまりつい気になって調べてしまい、その結果があまりにも衝撃的だったのでつい実装してしまったのでした(すぐ本来の目的を見失いがちなオタク)