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