ファイルシステムの構造 外部記憶装置のパーティション(区画) ファイルシステムとパーティション(区画) ファイルシステムのmount ファイルシステムのun-mount ファイルシステムの領域レイアウト ファイルシステムの階層化木構造 領域レイアウト情報のシステムコール 領域レイアウト情報のstatfs構造体 領域レイアウト情報を得る
外部記憶装置のパーティション(区画) ハードディスクは幾つかの区画に分れている ハードディスクの各区画をパーティションと呼ぶ。 パーティション1 パーティション2 パーティション3
ファイルシステムとパーティション(区画) ファイルシステムはパーティション毎に構成されている。 ファイルシステムは、ディレクトリによって階層化された木構造を形成する。 パーティション1 / bin home usr パーティション2 パーティション3 / / me you bin a.c
ファイルシステムのmount 異なるパーティション上のファイルシステムを、特定のパーティション上のファイルシステムに統合することが出来る Linuxが起動されると、各パーティションはマウントされ、統合されたファイルシステムが出来る パーティション2にあるファイルa.cは、絶対パス/home/me/a.cで示される パーティション1 / bin home usr パーティション2 パーティション3 / / me you bin a.c mount 統一された ファイルシステム / bin home usr me you bin a.c
ファイルシステムのun-mount 特定のパーティション上のファイルシステムに統合されているファイルシステムを、再び、異なるパーティション上のファイルシステムに分離することが出来る ファイルシステムを再び分離することをアンマウント(un-mount)と呼ぶ 統一された ファイルシステム / bin home usr me you bin a.c Un-mount パーティション1 / bin home usr パーティション2 パーティション3 / / me you bin a.c
ファイルシステムの領域レイアウト statfs構造体 ファイルシステム の種類 f_type ブート ブロック スーパ ブロック f_bsize ブロックサイズ グループ ディスクリプタ パーティ ション0 ブロック グループ 0 f_blocks 全ブロック数 データブロック ビットマップ f_bfree 空ブロック数 ブロック グループ 1 f_bavail iノード ビットマップ f_files iノードの総数 iノード テーブル 。 f_ffree 空iノード数 データ ブロック f_fsid ブロック グループ N f_namelen f_spare[6]
ファイルシステムの階層化木構造 /lost+found /vmlinux /usr /usr/bin /usr/src /usr/spool root inode ino=2 Directory 2 . .. 3 lost+found 26 vmlinuz 32 usr data block inode ino=32 17 bin 53 src 18 spool ino=26 Regular Linux Kernel object ino=17 42 yacc 68 gdb ino=68 ino=18 “/var/spool” /lost+found /vmlinux /usr /usr/bin /usr/src /usr/spool /usr/bin/yacc /usr/bin/gdb
statfs スーパブロックの情報を取出す 領域レイアウト情報のシステムコール インクルードファイル #include <sys/vfs.h> 書式 int statfs(const char *path, struct statfs *buf); 戻値 成功時 0 失敗時 -1 statfs スーパブロックの情報を取出す インクルードファイル #include <unistd.h> 書式 void sync(void); 戻値 なし sync スーパブロックを更新する statfs構造体 ファイルシステム の種類 f_type f_bsize ブロックサイズ f_blocks 全ブロック数 f_bfree 空ブロック数 f_bavail f_files iノードの総数 f_ffree 空iノード数 f_fsid f_namelen f_spare[6]
statfs構造体 領域レイアウト情報のstatfs構造体 ファイルシステム の種類 f_type ブート ブロック スーパ ブロック f_bsize ブロックサイズ グループ ディスクリプタ パーティ ション0 ブロック グループ 0 f_blocks 全ブロック数 データブロック ビットマップ f_bfree 空ブロック数 ブロック グループ 1 f_bavail iノード ビットマップ f_files iノードの総数 iノード テーブル 。 f_ffree 空iノード数 データ ブロック f_fsid ブロック グループ N f_namelen f_spare[6]
領域レイアウト情報を得る ndf.c #include <stdio.h> % ./ndf / #include <unistd.h> #include <stdlib.h> #include <sys/vfs.h> int main(int argc,char *argv[]) { struct statfs buf[1]; sync(); if (statfs(argv[1],buf)<0) { fprintf(stderr,"Cannot read super block!\n"); exit(EXIT_FAILURE); } fprintf(stderr,"%4.1f %% free\n",100.0*buf[0].f_bfree/buf[0].f_blocks); return EXIT_SUCCESS; % ./ndf / 40.2 % free %