Linux ディスク管理

Linux ディスク管理の良し悪しは、システム全体のパフォーマンスに直接関わります。

Linux ディスク管理でよく使われる3つのコマンドは次のとおりです。df、duとfdisk。

  • df(英語の正式名称:disk free):ファイルシステム全体のディスク使用量を表示します
  • du(英語の正式名称:disk used):ディスク容量の使用量を確認します
  • fdisk:ディスクのパーティション分割に使用します

df

df コマンドのパラメータ機能:ファイルシステムのディスク容量の使用状況を確認します。このコマンドを使用して、ハードディスクがどのくらいの容量を占有されているか、現在どのくらいの空き容量が残っているかなどの情報を取得できます。

構文:

df [-ahikHTm] [目录或文件名]

オプションとパラメータ:

  • -h:人間が読みやすい形式で出力結果を表示します(例:KB、MB、GB などの単位を使用)。

  • -T:ファイルシステムの種類を表示します。

  • -t <文件系统类型>:指定した種類のファイルシステムのみを表示します。

  • -i:inode の使用状況を表示します。

  • -H:このパラメータは-hの変種ですが、基本単位として 1024 バイトではなく 1000 バイトを使用します。つまり、SI(国際単位系)単位(例:MB、GB)でディスク使用量を表示し、2進単位(例:MiB、GiB)では表示しません。

  • -k:このオプションは、KB を単位としてディスク容量の使用状況を表示します。

  • -a:このパラメータは、仮想ファイルシステムを含むすべてのファイルシステムを表示します。例:proc、sysfsなど。このオプションを使用しない場合、デフォルトでは、dfコマンドは仮想ファイルシステムを表示しません。

実例1

システム内のすべてのファイルシステムを一覧表示します!

[root@www ~]# df
Filesystem      1K-blocks      Used Available Use% Mounted on
/dev/hdc2         9920624   3823112   5585444  41% /
/dev/hdc3         4956316    141376   4559108   4% /home
/dev/hdc1          101086     11126     84741  12% /boot
tmpfs              371332         0    371332   0% /dev/shm

Linux で df に何もオプションを付けない場合、デフォルトではシステム内のすべての(特別なメモリ内のファイルシステムと swap を除く)を 1 Kbytes 単位で一覧表示します!

実例2

容量の結果をわかりやすい容量形式で表示します

[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdc2             9.5G  3.7G  5.4G  41% /
/dev/hdc3             4.8G  139M  4.4G   4% /home
/dev/hdc1              99M   11M   83M  12% /boot
tmpfs                 363M     0  363M   0% /dev/shm

実例3

システム内のすべての特殊なファイル形式と名前を一覧表示します

[root@www ~]# df -aT
Filesystem    Type 1K-blocks    Used Available Use% Mounted on
/dev/hdc2     ext3   9920624 3823112   5585444  41% /
proc          proc         0       0         0   -  /proc
sysfs        sysfs         0       0         0   -  /sys
devpts      devpts         0       0         0   -  /dev/pts
/dev/hdc3     ext3   4956316  141376   4559108   4% /home
/dev/hdc1     ext3    101086   11126     84741  12% /boot
tmpfs        tmpfs    371332       0    371332   0% /dev/shm
none   binfmt_misc         0       0         0   -  /proc/sys/fs/binfmt_misc
sunrpc  rpc_pipefs         0       0         0   -  /var/lib/nfs/rpc_pipefs

実例4

/etc 配下の利用可能なディスク容量をわかりやすい容量形式で表示します

[root@www ~]# df -h /etc
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdc2             9.5G  3.7G  5.4G  41% /

du

Linux du コマンドも使用容量を確認するためのものですが、df コマンドとは異なり、Linux du コマンドはファイルとディレクトリのディスク使用容量を確認するものです。やはり df コマンドとはいくつかの違いがあります。ここでは Linux du コマンドを紹介します。

構文:

du [-ahskm] 文件或目录名称

オプションとパラメータ:

  • -a :すべてのファイルとディレクトリの容量を一覧表示します。デフォルトではディレクトリ配下のファイル量のみを集計するためです。
  • -h :人間が読みやすい容量形式(G/M)で表示します。
  • -s :指定したディレクトリまたはファイルの合計サイズのみを表示し、サブディレクトリのサイズは表示しません。
  • -S :サブディレクトリを含めた合計を表示します。-s とは少し異なります。
  • -k :KBytes 単位で容量を表示します。
  • -m :MBytes 単位で容量を表示します。

実例1

現在のディレクトリ配下のすべてのフォルダ容量のみを一覧表示します(隠しフォルダを含む):

[root@www ~]# du
8       ./test4     <==每个目录都会列出来
8       ./test2
....中间省略....
12      ./.gconfd   <==包括隐藏文件的目录
220     .           <==这个目录(.)所占用的总量

du を何もオプションを付けずに直接入力すると、du は現在のディレクトリ内のサブディレクトリが占有しているハードディスク容量を分析します。

実例2

ファイルの容量も一覧表示します

[root@www ~]# du -a
12      ./install.log.syslog   <==有文件的列表了
8       ./.bash_logout
8       ./test4
8       ./test2
....中间省略....
12      ./.gconfd
220     .

実例3

ルートディレクトリ配下の各ディレクトリが占有している容量を確認します

[root@www ~]# du -sm /*
7       /bin
6       /boot
.....中间省略....
0       /proc
.....中间省略....
1       /tmp
3859    /usr     <==系统初期最大就是他了啦!
77      /var

ワイルドカード * を使用して各ディレクトリを表します。

df とは異なり、du コマンドは実際にファイルシステム内に直接アクセスしてすべてのファイルデータを検索します。


fdisk

fdisk は Linux のディスクパーティションテーブル操作ツールです。

構文:

fdisk [-l] 装置名称

オプションとパラメータ:

  • -l :後ろに指定したデバイスのすべてのパーティション内容を出力します。fdisk -l のみの場合、システムはシステム内で検索できるすべてのデバイスのパーティションを一覧表示します。

実例1

すべてのパーティション情報を一覧表示します

[root@AY120919111755c246621 tmp]# fdisk -l

Disk /dev/xvda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *           1        2550    20480000   83  Linux
/dev/xvda2            2550        2611      490496   82  Linux swap / Solaris

Disk /dev/xvdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x56f40944

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdb2               1        2610    20964793+  83  Linux

実例2

システム内のルートディレクトリがあるディスクを特定し、そのハードディスク内の関連情報を確認します

[root@www ~]# df /            <==注意:重点在找出磁盘文件名而已
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hdc2              9920624   3823168   5585388  41% /

[root@www ~]# fdisk /dev/hdc  <==仔细看,不要加上数字喔!
The number of cylinders for this disk is set to 5005.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):     <==等待你的输入!

m を入力すると、以下のコマンドの紹介が表示されます。

Command (m for help): m   <== 输入 m 后,就会看到底下这些命令介绍
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition            <==删除一个partition
   l   list known partition types
   m   print this menu
   n   add a new partition           <==新增一个partition
   o   create a new empty DOS partition table
   p   print the partition table     <==在屏幕上显示分割表
   q   quit without saving changes   <==不储存离开fdisk程序
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit  <==将刚刚的动作写入分割表
   x   extra functionality (experts only)

fdisk を終了するときに を押すとq、すべての操作が有効になりません!逆に、 を押すとw操作が有効になるという意味です。

Command (m for help): p  <== 这里可以输出目前磁盘的状态

Disk /dev/hdc: 41.1 GB, 41174138880 bytes        <==这个磁盘的文件名与容量
255 heads, 63 sectors/track, 5005 cylinders      <==磁头、扇区与磁柱大小
Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱的大小

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1   *           1          13      104391   83  Linux
/dev/hdc2              14        1288    10241437+  83  Linux
/dev/hdc3            1289        1925     5116702+  83  Linux
/dev/hdc4            1926        5005    24740100    5  Extended
/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris
# 装置文件名 启动区否 开始磁柱    结束磁柱  1K大小容量 磁盘分区槽内的系统

Command (m for help): q

保存せずに終了したいですか?q を押せばOKです!むやみに w を押さないでください!

を使用するとp現在のこのディスクのパーティションテーブル情報を一覧表示できます。この情報の上半分はディスク全体の状態を表示しています。


ディスクのフォーマット

ディスクのパーティション分割が完了したら、当然ファイルシステムのフォーマットを行います。フォーマットのコマンドは非常に簡単で、mkfs(make filesystem)コマンドを使用します。

構文:

mkfs [-t 文件系统格式] 装置文件名

オプションとパラメータ:

  • -t :ファイルシステム形式を指定できます。例:ext3、ext2、vfat など(システムがサポートしている場合のみ有効)

実例1

mkfs がサポートするファイル形式を確認します

[root@www ~]# mkfs[tab][tab]
mkfs         mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.msdos   mkfs.vfat

[tab] を2回押すと、mkfs がサポートするファイル形式が上記のように表示されます。

実例2

パーティション /dev/hdc6(自分のパーティションを指定可能)を ext3 ファイルシステムにフォーマットします:

[root@www ~]# mkfs -t ext3 /dev/hdc6
mke2fs 1.39 (29-May-2006)
Filesystem label=                <==这里指的是分割槽的名称(label)
OS type: Linux
Block size=4096 (log=2)          <==block 的大小配置为 4K 
Fragment size=4096 (log=2)
251392 inodes, 502023 blocks     <==由此配置决定的inode/block数量
25101 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=515899392
16 block groups
32768 blocks per group, 32768 fragments per group
15712 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 blocks): done <==有日志记录
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
# 这样就创建起来我们所需要的 Ext3 文件系统了!简单明了!

ディスクのチェック

fsck(file system check)は、一貫性のないファイルシステムを検査および修復するために使用します。

システムが停電したりディスクに問題が発生した場合、fsck コマンドを使用してファイルシステムを検査できます。

構文:

fsck [-t 文件系统] [-ACay] 装置名称

オプションとパラメータ:

  • -t : ファイルシステムの種類を指定します。/etc/fstab にすでに定義されている場合、またはカーネル自体がサポートしている場合は、このパラメータを付ける必要はありません。
  • -s : fsck のコマンドを1つずつ順番に実行して検査します。
  • -A : /etc/fstab に一覧表示されているすべてのパーティションを検査します。
  • -C : 完全な検査の進行状況を表示します。
  • -d : e2fsck のデバッグ結果を出力します。
  • -p : -A 条件と同時に、複数の fsck 検査を同時に実行します。
  • -R : -A 条件と同時に、/ を省略して検査しません。
  • -V : 詳細表示モード
  • -a : 検査でエラーが見つかった場合、自動的に修復します。
  • -r : 検査でエラーが見つかった場合、ユーザーが修復するかどうかを回答します。
  • -y : 各ファイルの検査時に自動的に yes を入力するオプションです。どのファイルが異常かわからない場合、# fsck -y を実行してすべてを検査・修復できます。

実例1

システムで fsck コマンドがサポートされているファイルシステムの数を確認します:

[root@www ~]# fsck[tab][tab]
fsck         fsck.cramfs  fsck.ext2    fsck.ext3    fsck.msdos   fsck.vfat

実例2

/dev/hdc6 パーティションを強制検査します:

[root@www ~]# fsck -C -f -t ext3 /dev/hdc6 
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks

-f オプションを付けない場合、このファイルシステムには問題が発生したことがないため、検査は非常に高速に完了します。-f を付けて強制検査すると、1つずつ過程が表示されます。


ディスクのマウントとアンマウント

Linux のディスクのマウントにはmountコマンドを使用し、アンマウントにはumountコマンドを使用します。

ディスクのマウント構文:

mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点

実例1

デフォルトの方法で、先ほど作成した /dev/hdc6 を /mnt/hdc6 にマウントします!

[root@www ~]# mkdir /mnt/hdc6
[root@www ~]# mount /dev/hdc6 /mnt/hdc6
[root@www ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
.....中间省略.....
/dev/hdc6              1976312     42072   1833836   3% /mnt/hdc6

ディスクのアンマウントコマンドumount構文:

umount [-fn] 装置文件名或挂载点

オプションとパラメータ:

  • -f :強制的にアンマウントします!ネットワークファイルシステム(NFS)などが読み取れない場合に使用できます。
  • -n :/etc/mtab を更新せずにアンマウントします。

/dev/hdc6 をアンマウントします

[root@www ~]# umount /dev/hdc6     
その他の拡張