読者です 読者をやめる 読者になる 読者になる

はわわーっ

はわわわわっ

ext4のめもその3

http://yomi322.hateblo.jp/entry/2015/06/28/143213 のつづき。

でかいファイルを置いたときにどうなるか見てみる。

% for i in {0..1000000}; do echo 0123456789; done | sudo tee /test.txt
% stat /test.txt                                                      
  File: ‘/test.txt’
  Size: 11000011  	Blocks: 21488      IO Block: 4096   regular file
Device: fc00h/64512d	Inode: 16          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-06-28 19:30:51.672099608 +0900
Modify: 2015-06-28 19:31:26.976099722 +0900
Change: 2015-06-28 19:31:26.976099722 +0900
 Birth: -

inodeは16。

% echo $(( (16 - 1) / 0x2000 ))
0
% echo $(( (16 - 1) % 0x2000 ))
15

なので、ブロックグループ0の15番目のinodeをみる。
グループディスクリプタ0のinode tableが1057だったので、(15 * 0x100) + (1057 * 0x1000) = 0x421f00がアドレス。

% sudo hexdump -C -s 0x421f00 /dev/dm-0 | head
00421f00  a4 81 00 00 cb d8 a7 00  db cc 8f 55 fe cc 8f 55  |...........U...U|
00421f10  fe cc 8f 55 00 00 00 00  00 00 01 00 f0 53 00 00  |...U.........S..|
00421f20  00 00 08 00 01 00 00 00  0a f3 01 00 04 00 00 00  |................|
00421f30  00 00 00 00 00 00 00 00  7e 0a 00 00 00 60 09 00  |........~....`..|
00421f40  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00421f60  00 00 00 00 e8 66 32 14  00 00 00 00 00 00 00 00  |.....f2.........|
00421f70  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00421f80  1c 00 00 00 28 66 b8 e8  28 66 b8 e8 60 b4 3d a0  |....(f..(f..`.=.|
00421f90  db cc 8f 55 60 b4 3d a0  00 00 00 00 00 00 00 00  |...U`.=.........|

で、i_blockをみて次はアドレス0x96000000を見る。使っているブロック数は0xa7e。

% sudo hexdump -C -s 0x96000000 /dev/dm-0 | head
96000000  30 31 32 33 34 35 36 37  38 39 0a 30 31 32 33 34  |0123456789.01234|
96000010  35 36 37 38 39 0a 30 31  32 33 34 35 36 37 38 39  |56789.0123456789|
96000020  0a 30 31 32 33 34 35 36  37 38 39 0a 30 31 32 33  |.0123456789.0123|
96000030  34 35 36 37 38 39 0a 30  31 32 33 34 35 36 37 38  |456789.012345678|
96000040  39 0a 30 31 32 33 34 35  36 37 38 39 0a 30 31 32  |9.0123456789.012|
96000050  33 34 35 36 37 38 39 0a  30 31 32 33 34 35 36 37  |3456789.01234567|
96000060  38 39 0a 30 31 32 33 34  35 36 37 38 39 0a 30 31  |89.0123456789.01|
96000070  32 33 34 35 36 37 38 39  0a 30 31 32 33 34 35 36  |23456789.0123456|
96000080  37 38 39 0a 30 31 32 33  34 35 36 37 38 39 0a 30  |789.0123456789.0|
96000090  31 32 33 34 35 36 37 38  39 0a 30 31 32 33 34 35  |123456789.012345|

ブロックの境界あたりをみてみる。

% sudo hexdump -C -s 0x96000ff0 /dev/dm-0 | head
96000ff0  0a 30 31 32 33 34 35 36  37 38 39 0a 30 31 32 33  |.0123456789.0123|
96001000  34 35 36 37 38 39 0a 30  31 32 33 34 35 36 37 38  |456789.012345678|
96001010  39 0a 30 31 32 33 34 35  36 37 38 39 0a 30 31 32  |9.0123456789.012|
96001020  33 34 35 36 37 38 39 0a  30 31 32 33 34 35 36 37  |3456789.01234567|
96001030  38 39 0a 30 31 32 33 34  35 36 37 38 39 0a 30 31  |89.0123456789.01|
96001040  32 33 34 35 36 37 38 39  0a 30 31 32 33 34 35 36  |23456789.0123456|
96001050  37 38 39 0a 30 31 32 33  34 35 36 37 38 39 0a 30  |789.0123456789.0|
96001060  31 32 33 34 35 36 37 38  39 0a 30 31 32 33 34 35  |123456789.012345|
96001070  36 37 38 39 0a 30 31 32  33 34 35 36 37 38 39 0a  |6789.0123456789.|
96001080  30 31 32 33 34 35 36 37  38 39 0a 30 31 32 33 34  |0123456789.01234|

そのまま続いてるっぽい。最後あたり

% sudo hexdump -C -s 0x96a7d800 /dev/dm-0 | head -n 20
96a7d800  36 37 38 39 0a 30 31 32  33 34 35 36 37 38 39 0a  |6789.0123456789.|
96a7d810  30 31 32 33 34 35 36 37  38 39 0a 30 31 32 33 34  |0123456789.01234|
96a7d820  35 36 37 38 39 0a 30 31  32 33 34 35 36 37 38 39  |56789.0123456789|
96a7d830  0a 30 31 32 33 34 35 36  37 38 39 0a 30 31 32 33  |.0123456789.0123|
96a7d840  34 35 36 37 38 39 0a 30  31 32 33 34 35 36 37 38  |456789.012345678|
96a7d850  39 0a 30 31 32 33 34 35  36 37 38 39 0a 30 31 32  |9.0123456789.012|
96a7d860  33 34 35 36 37 38 39 0a  30 31 32 33 34 35 36 37  |3456789.01234567|
96a7d870  38 39 0a 30 31 32 33 34  35 36 37 38 39 0a 30 31  |89.0123456789.01|
96a7d880  32 33 34 35 36 37 38 39  0a 30 31 32 33 34 35 36  |23456789.0123456|
96a7d890  37 38 39 0a 30 31 32 33  34 35 36 37 38 39 0a 30  |789.0123456789.0|
96a7d8a0  31 32 33 34 35 36 37 38  39 0a 30 31 32 33 34 35  |123456789.012345|
96a7d8b0  36 37 38 39 0a 30 31 32  33 34 35 36 37 38 39 0a  |6789.0123456789.|
96a7d8c0  30 31 32 33 34 35 36 37  38 39 0a 00 00 00 00 00  |0123456789......|
96a7d8d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
97000000  50 61 63 6b 61 67 65 3a  20 6b 70 61 72 74 78 0a  |Package: kpartx.|
97000010  53 74 61 74 75 73 3a 20  69 6e 73 74 61 6c 6c 20  |Status: install |
97000020  6f 6b 20 69 6e 73 74 61  6c 6c 65 64 0a 50 72 69  |ok installed.Pri|
97000030  6f 72 69 74 79 3a 20 65  78 74 72 61 0a 53 65 63  |ority: extra.Sec|
97000040  74 69 6f 6e 3a 20 61 64  6d 69 6e 0a 49 6e 73 74  |tion: admin.Inst|

最後までファイル全部連続してた。
特にブロック境界とか関係なくそのまま続いてるっぽい。

ext4のめもその2

http://yomi322.hateblo.jp/entry/2015/06/28/094928のつづき。

ディレクトリエントリを見るところから。

% sudo hexdump -C -s 0x2421000 /dev/dm-0 | head
02421000  02 00 00 00 0c 00 01 02  2e 00 00 00 02 00 00 00  |................|
02421010  0c 00 02 02 2e 2e 00 00  0b 00 00 00 14 00 0a 02  |................|
02421020  6c 6f 73 74 2b 66 6f 75  6e 64 00 00 01 00 2c 00  |lost+found....,.|
02421030  0c 00 04 02 62 6f 6f 74  01 00 e4 00 0c 00 03 02  |....boot........|
02421040  65 74 63 00 01 00 26 00  10 00 05 02 6d 65 64 69  |etc...&.....medi|
02421050  61 00 00 00 01 00 a2 00  0c 00 03 02 76 61 72 00  |a...........var.|
02421060  01 00 5e 00 0c 00 03 02  62 69 6e 00 01 00 24 00  |..^.....bin...$.|
02421070  0c 00 03 02 64 65 76 00  01 00 58 00 0c 00 04 02  |....dev...X.....|
02421080  68 6f 6d 65 01 00 c4 00  0c 00 03 02 6c 69 62 00  |home........lib.|
02421090  01 00 28 00 10 00 05 02  6c 69 62 36 34 00 00 00  |..(.....lib64...|

エントリの構造体は

Offset  Size	Name
0x0     __le32  inode
0x4     __le16  rec_len
0x6     __u8    name_len
0x7     __u8    file_type
0x8     char    name[EXT4_NAME_LEN]

最後のnameは4バイトアラインされるようになっているらしい。余ったところは0x00で埋まってるらしい。
上で見えてる範囲では、.、..、lost+found、bootとかが見えている。

とりあえず、etcの中を見てみる。inodeは0xe40001。
このinodeが入っているブロックグループは(0xe40001 - 1) / 0x2000 = 1824。
inodeのインデックスは(0xe40001 - 1) % 0x2000 = 0

ブロックグループ1824のinode tableは59768864(0x3900020)ブロックにあったので、etcのinodeは0x3900020 * 0x1000 + 0 = 0x3900020000

% sudo hexdump -C -s 0x3900020000 /dev/dm-0 | head
3900020000  ed 41 00 00 00 30 00 00  b5 73 8f 55 64 e4 8d 55  |.A...0...s.Ud..U|
3900020010  64 e4 8d 55 00 00 00 00  00 00 87 00 18 00 00 00  |d..U............|
3900020020  00 10 08 00 2f 09 00 00  0a f3 02 00 04 00 00 00  |..../...........|
3900020030  00 00 00 00 00 00 00 00  01 00 00 00 20 20 90 03  |............  ..|
3900020040  01 00 00 00 02 00 00 00  c4 21 90 03 00 00 00 00  |.........!......|
3900020050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
3900020060  00 00 00 00 e0 85 48 e1  00 00 00 00 00 00 00 00  |......H.........|
3900020070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
3900020080  1c 00 00 00 0c e9 c6 40  0c e9 c6 40 d4 84 08 14  |.......@...@....|
3900020090  29 c9 73 55 50 94 a3 1d  00 00 00 00 00 00 00 00  |).sUP...........|

ルートディレクトリの時と同じようにi_blockをみると、この中身は0x3902020ブロックにある。

% sudo hexdump -C -s 0x3902020000 /dev/dm-0 | head
3902020000  01 00 e4 00 0c 00 01 02  2e 00 00 00 02 00 00 00  |................|
3902020010  f4 0f 02 02 2e 2e 00 00  00 00 00 00 01 08 00 00  |................|
3902020020  fc 01 02 00 01 00 00 00  98 6d f5 85 02 00 00 00  |.........m......|
3902020030  4e 65 74 77 6f 72 6b 4d  61 6e 61 67 65 72 00 00  |NetworkManager..|
3902020040  04 00 e4 00 10 00 06 02  55 50 6f 77 65 72 00 00  |........UPower..|
3902020050  05 00 e4 00 0c 00 03 02  58 31 31 00 06 00 e4 00  |........X11.....|
3902020060  0c 00 04 02 61 63 70 69  07 00 e4 00 14 00 0c 02  |....acpi........|
3902020070  61 6c 74 65 72 6e 61 74  69 76 65 73 08 00 e4 00  |alternatives....|
3902020080  0c 00 03 02 61 70 6d 00  09 00 e4 00 10 00 08 02  |....apm.........|
3902020090  61 70 70 61 72 6d 6f 72  0a 00 e4 00 14 00 0a 02  |apparmor........|

ちゃんと/etcの中が見えてるっぽい。

あとはファイルの中身を見てみる。

% stat /etc/issue
  File: ‘/etc/issue’
  Size: 26        	Blocks: 8          IO Block: 4096   regular file
Device: fc00h/64512d	Inode: 14942368    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-06-28 13:10:39.912025688 +0900
Modify: 2015-02-03 18:14:47.000000000 +0900
Change: 2015-06-07 13:31:56.244313909 +0900
 Birth: -

なのでinode 14942368をみてみる。

% echo $(( (14942368 - 1) / 0x2000 ))
1824
% echo $(( (14942368 - 1) % 0x2000 ))
159

なので、0x3900020 * 0x1000 + 159 * 0x100 = 0x3900029f00をみる。

% sudo hexdump -C -s 0x3900029f00 /dev/dm-0 | head  
3900029f00  a4 81 00 00 1a 00 00 00  bf 73 8f 55 3c c9 73 55  |.........s.U<.sU|
3900029f10  87 91 d0 54 00 00 00 00  00 00 01 00 08 00 00 00  |...T............|
3900029f20  00 00 08 00 01 00 00 00  0a f3 01 00 04 00 00 00  |................|
3900029f30  00 00 00 00 00 00 00 00  01 00 00 00 23 80 90 03  |............#...|
3900029f40  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
3900029f60  00 00 00 00 ab 87 48 e1  00 00 00 00 00 00 00 00  |......H.........|
3900029f70  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
3900029f80  1c 00 00 00 d4 bc 3f 3a  00 00 00 00 60 a1 71 d9  |......?:....`.q.|
3900029f90  3c c9 73 55 d4 bc 3f 3a  00 00 00 00 00 00 00 00  |<.sU..?:........|

で、i_blockをみて

% sudo hexdump -C -s 0x3908023000 /dev/dm-0 | head
3908023000  55 62 75 6e 74 75 20 31  34 2e 30 34 2e 32 20 4c  |Ubuntu 14.04.2 L|
3908023010  54 53 20 5c 6e 20 5c 6c  0a 0a 00 00 00 00 00 00  |TS \n \l........|
3908023020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
3908024000  55 62 75 6e 74 75 20 31  34 2e 30 34 2e 32 20 4c  |Ubuntu 14.04.2 L|
3908024010  54 53 0a 00 00 00 00 00  00 00 00 00 00 00 00 00  |TS..............|
3908024020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
3908025000  64 62 75 73 20 7b 6d 61  73 6b 20 7b 61 63 71 75  |dbus {mask {acqu|
3908025010  69 72 65 20 73 65 6e 64  20 72 65 63 65 69 76 65  |ire send receive|

になっていて、ファイルの中身も見れた。


あとは、1ブロックに収まらない容量のファイルだとどうなるかも調べておかないとなぁ。

ext4のめも

ext4のディスクレイアウトを見てみる。

参考


とりあえず、先頭から。

% sudo hexdump -C /dev/dm-0 | head
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000400  00 e0 e9 00 00 5c a7 03  99 c4 2e 00 9f ae 81 03  |.....\..........|
00000410  4b 7e e6 00 00 00 00 00  02 00 00 00 02 00 00 00  |K~..............|
00000420  00 80 00 00 00 80 00 00  00 20 00 00 26 bd 7a 55  |......... ..&.zU|
00000430  26 bd 7a 55 09 00 ff ff  53 ef 01 00 01 00 00 00  |&.zU....S.......|
00000440  22 c9 73 55 00 00 00 00  00 00 00 00 01 00 00 00  |".sU............|
00000450  00 00 00 00 0b 00 00 00  00 01 00 00 3c 00 00 00  |............<...|
00000460  46 02 00 00 7b 00 00 00  46 40 20 46 a2 41 43 4f  |F...{...F@ F.ACO|
00000470  85 c1 93 22 8d 68 5b 57  00 00 00 00 00 00 00 00  |...".h[W........|

先頭1024Bは0。でoffset 0x400からスーパーブロック。0x438の2バイトが0xef53になってればext4
スーパーブロックはサイズ1ブロックなので1024バイト。

スーパーブロックのダンプ。

% sudo hexdump -C -s 0x400 -n 1024 /dev/dm-0
00000400  00 e0 e9 00 00 5c a7 03  99 c4 2e 00 9f ae 81 03  |.....\..........|
00000410  4b 7e e6 00 00 00 00 00  02 00 00 00 02 00 00 00  |K~..............|
00000420  00 80 00 00 00 80 00 00  00 20 00 00 26 bd 7a 55  |......... ..&.zU|
00000430  26 bd 7a 55 09 00 ff ff  53 ef 01 00 01 00 00 00  |&.zU....S.......|
00000440  22 c9 73 55 00 00 00 00  00 00 00 00 01 00 00 00  |".sU............|
00000450  00 00 00 00 0b 00 00 00  00 01 00 00 3c 00 00 00  |............<...|
00000460  46 02 00 00 7b 00 00 00  46 40 20 46 a2 41 43 4f  |F...{...F@ F.ACO|
00000470  85 c1 93 22 8d 68 5b 57  00 00 00 00 00 00 00 00  |...".h[W........|
00000480  00 00 00 00 00 00 00 00  2f 00 61 72 67 65 74 00  |......../.arget.|
00000490  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000004c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 f1 03  |................|
000004d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000004e0  08 00 00 00 00 00 00 00  68 1d 58 00 d0 4c a1 84  |........h.X..L..|
000004f0  88 45 4d 03 b3 61 9a 6b  75 5a 7b 80 01 01 00 00  |.EM..a.kuZ{.....|
00000500  0c 00 00 00 00 00 00 00  22 c9 73 55 0a f3 02 00  |........".sU....|
00000510  04 00 00 00 00 00 00 00  00 00 00 00 ff 7f 00 00  |................|
00000520  00 80 d0 01 ff 7f 00 00  01 00 00 00 ff ff d0 01  |................|
00000530  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000540  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 08  |................|
00000550  00 00 00 00 00 00 00 00  00 00 00 00 1c 00 1c 00  |................|
00000560  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000570  00 00 00 00 04 00 00 00  29 d5 7a 0f 00 00 00 00  |........).z.....|
00000580  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000800

その後に、グループディスクリプタがくる。グループディスクリプタのブロック数は1ブロックより多くなる時もある。ここが何ブロック使っているかは別途計算。

まず、ブロック数を計算する。これはスーパーブロックのs_blocks_count_lo(offset 0x4/size 4)とs_blocks_count_hi(offset 0x150/size 4)を合わせる。
今の場合、s_blocks_count_hiが0でs_blocks_count_loが0x3a75c00なので、ブロック数は0x3a75c00。
これをs_blocks_per_group(offset 0x20/size 4)で割るとブロックグループの数になる。
s_blocks_per_groupが0x8000なのでブロックグループ数は1870。

% echo $(( 0x3a75c00 / 0x8000 ))
1870

で、グループディスクリプタの構造体のサイズを調べる。これはs_feature_incompat(offset 0x60/size 4)のINCOMPAT_64BIT(bit 0x80)を見る。このビットが有効ならグループディスクリプタのサイズは64B、そうでなければ32Bらしい。今の場合は32バイト。

グループディスクリプタが使っているブロック数は((ブロックグループ数 * ディスクリプタのサイズ) / ブロックサイズ) + 1で計算できる。
ブロックサイズはs_log_block_size(offset 0x18/size 4)を元に2^(10+s_log_block_size)になる。
今の場合、ブロックサイズは4096B(0x1000)で、ブロック数は15。

% echo $(( ((1870 * 32) / 0x1000) + 1 ))
15

グループディスクリプタの次にくるのがReserved GDT Blocksで、グループディスクリプタの予約領域。
この予約領域のブロック数はスーパーブロックのs_reserved_gdt_blocks(offset 0xce/size 2)で、
今の場合は0x3f1。

このあとに、データブロックビットマップ、inodeビットマップ、inode tableが来てデータブロックがある。

データブロックビットマップ、inodeビットマップ、inode tableはグループディスクリプタに開始位置が書いてある。
グループ0のグループディスクリプタを見てみる。

% sudo hexdump -C -s 0x1000 -n 32 /dev/dm-0
00001000  01 04 00 00 11 04 00 00  21 04 00 00 d9 5b f1 1f  |........!....[..|
00001010  02 00 04 00 00 00 00 00  00 00 00 00 f1 1f 8e 74  |...............t|
00001020

今の場合はグループディスクリプタの構造体サイズが32Bなので、bg_block_bitmap_lo(offset 0x0/size 4)とbg_inode_bitmap_lo(offset 0x4/size 4)とbg_inode_table_lo(offset 0x8/size 4)を見る。
それぞれ0x401、0x411、0x421が開始位置。

ビットマップはとりあえずおいといて、inode tableを見る。
inode構造体のサイズはスーパーブロックのs_inode_size(offset 0x58/size 2)にあって、今の場合は0x100B。
ひとつのブロックグループにいくつのinodeがあるのかはs_inodes_per_group(offset 0x28/size 4)で、今の場合は0x200。

特別なinodeが0から11まであって、inode 2がroot directoryになっている。
inode 2のアドレスはinodeサイズ * (inode番号 - 1) + inode table開始位置なので0x100 * (2 - 1) + 0x421000 = 421100。

% sudo hexdump -C -s 0x421100 /dev/dm-0 | head
00421100  ed 41 00 00 00 10 00 00  17 e4 8d 55 9f 32 86 55  |.A.........U.2.U|
00421110  9f 32 86 55 00 00 00 00  00 00 17 00 08 00 00 00  |.2.U............|
00421120  00 00 08 00 3f 00 00 00  0a f3 01 00 04 00 00 00  |....?...........|
00421130  00 00 00 00 00 00 00 00  01 00 00 00 21 24 00 00  |............!$..|
00421140  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00421180  1c 00 00 00 a4 ed 29 6e  a4 ed 29 6e 30 b5 eb cd  |......)n..)n0...|
00421190  27 c9 73 55 00 00 00 00  00 00 00 00 00 00 00 00  |'.sU............|
004211a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*

ファイルとかディレクトリの中身にアクセスするには、i_block(offset 0x28/size 60)を見る。

エクステントが有効になっているかどうかで、たどり方が変わる。
スーパーブロックのs_feature_incompatのINCOMPAT_EXTENTSビットが有効で、かつ、inodeのi_flagsのEXT4_EXTENTS_FLが有効になっていれば、そのinodeはエクステントが有効。

今の場合、エクステント有効で、i_blockは

% sudo hexdump -C -s 0x421128 -n 60 /dev/dm-0 | head
00421128  0a f3 01 00 04 00 00 00  00 00 00 00 00 00 00 00  |................|
00421138  01 00 00 00 21 24 00 00  00 00 00 00 00 00 00 00  |....!$..........|
00421148  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00421164

になっている。

先頭12Bがヘッダになっていて、最初の2Bがマジックナンバーで0xf30a。
eh_depth(offset 0x6/size 2)が0なので、エクステントインデックスは使われていない。

エクステントインデックスがないので続きはエクステント。
ee_start_hi(offset 0x6/size 2)とee_start_lo(offset 0x8/size 4)が開始位置のブロック番号。
ee_len(offset 0x4/size 2)がエクステントが使うブロック数。

なので0x2421のブロックから1ブロックぶんがこのエクステントの内容。

% sudo hexdump -C -s 0x2421000 /dev/dm-0 | head
02421000  02 00 00 00 0c 00 01 02  2e 00 00 00 02 00 00 00  |................|
02421010  0c 00 02 02 2e 2e 00 00  0b 00 00 00 14 00 0a 02  |................|
02421020  6c 6f 73 74 2b 66 6f 75  6e 64 00 00 01 00 2c 00  |lost+found....,.|
02421030  0c 00 04 02 62 6f 6f 74  01 00 e4 00 0c 00 03 02  |....boot........|
02421040  65 74 63 00 01 00 26 00  10 00 05 02 6d 65 64 69  |etc...&.....medi|
02421050  61 00 00 00 01 00 a2 00  0c 00 03 02 76 61 72 00  |a...........var.|
02421060  01 00 5e 00 0c 00 03 02  62 69 6e 00 01 00 24 00  |..^.....bin...$.|
02421070  0c 00 03 02 64 65 76 00  01 00 58 00 0c 00 04 02  |....dev...X.....|
02421080  68 6f 6d 65 01 00 c4 00  0c 00 03 02 6c 69 62 00  |home........lib.|
02421090  01 00 28 00 10 00 05 02  6c 69 62 36 34 00 00 00  |..(.....lib64...|

ルートディレクトリのディレクトリエントリが見えている。

edk2のビルドめも

メモ。

参考

パッケージとか

% sudo apt-get install -fy build-essential uuid-dev nasm

EDK2を取ってきてビルド。HEADでやったらMdeModulePkgだとビルド失敗してた。とりあえずAppPkgあればいいのかもってことで、AppPkgをターゲットにした。

% git clone http://github.com/tianocore/edk2
% cd edk2
% make -C BaseTools
% . ./edksetup.sh
% vim Conf/target.txt
% diff -u0 Conf/target.txt{.orig,}
--- Conf/target.txt.orig	2015-06-07 15:29:21.981669622 +0900
+++ Conf/target.txt	2015-06-07 15:30:00.581667584 +0900
@@ -26 +26 @@
-ACTIVE_PLATFORM       = Nt32Pkg/Nt32Pkg.dsc
+ACTIVE_PLATFORM       = AppPkg/AppPkg.dsc
@@ -50 +50 @@
-TARGET_ARCH           = IA32
+TARGET_ARCH           = X64
@@ -60 +60 @@
-TOOL_CHAIN_TAG        = MYTOOLS
+TOOL_CHAIN_TAG        = GCC48
% build

qemu使って実行。OVMFからOVMFのファイル持ってくる。

% sudo apt-get install -fy qemu-system-x86
% mkdir OVMF
% unzip ~/Downloads/OVMF-X64-r15214.zip -d OVMF
% qemu-system-x86_64 -bios OVMF/OVMF.fd -hda fat:Build/AppPkg/DEBUG_GCC48/X64
Shell> fs0:
FS0:\> Hello.efi
Hello there fellow Programmer.
Welcome to the world of EDK II.
FS0:\> 

xubuntuでcapslockをctrlにする

めも。
xfceでcapsLockとctrlキーを入れ替える ~ プログラムのメモ これ見ながらやった。

settings→session and start up
で新規追加で

/usr/bin/setxkbmap -option "ctrl:nocaps"

を実行させる。

xubuntuインストールのメモ

インストールしたときのメモ。

日本語入力

$ sudo apt-get install -fy fcitx fcitx-mozc fcitx-libs-qt5 fcitx-frontend-qt5
$ im-config -n fcitx

これで再起動したら有効になる。再ログインでもいいのかも?

ブラウザ

$ sudo apt-get install -fy chromium-browser chromium-browser-l10n

firefoxは最初から入ってたみたい。

とりあえず、これで最低限使えるようになった気がする。

windowsからssh越しにsambaに接続する

sshのポートフォワーディングを使ってsambaにアクセスするメモ。

sftp net driveってのを使ってたんだけど、サーバ側(ubuntu)で日本語ファイル名が文字化けするのが気持ち悪かったのでいろいろ試してみた結果、とりあえずこれに落ち着いた。

それにしてもwindowsめんどくさい……。エクスプローラーでパス入力するときにポートも指定できるようにすればいいのに。なんで445番ポート決め打ちなんだ。

やり方はCIFS-over-SSH for Windows 7にあるのをほぼそのまま。
ipアドレスとか適当に変えたくらいかな。

windows8はこっちにあった。CIFS-over-SSH for Windows 8