Linuxディスクの空きが0になってしまう問題について

このQ&Aのポイント
  • Linuxのディスク容量について、空き容量が0になってしまう問題が発生しています。
  • dfコマンドで確認すると、/の空き容量が0となっており、容量を消費しているように見えます。
  • findコマンドを使用すると、duの結果によれば、/の下にトータル7637292の容量を消費していることがわかります。しかし、実際の空き容量が0である理由は不明です。
回答を見る
  • ベストアンサー

Linuxのディスク。空いているはずなのに0

/下は本来5GBくらいは空いているはずではないかと思うのですが、dfでみると空きが0になってしまいます。 # df ファイルシステム 1K-ブロック 使用 空き 使用% マウント位置 /dev/sda2 7637400 7637292 0 100% / /dev/sda1 101086 20574 75293 22% /boot none 1037388 0 1037388 0% /dev/shm /dev/sdb 20642428 9190668 10403184 47% /home /dev/sdc 15481840 6056152 8639256 42% /backup 192.168.1.100:/home/httpd 20642432 9172096 10421760 47% /mnt/192.168.1.100 //storage1/backup$ 2926654528 1877643692 1049010836 65% /mnt/storage1 //storage2/backup 1945310816 1782780424 162530392 92% /mnt/storage2 とすると /の空きが0になっています。 # find / -type d -maxdepth 1 | awk '{res = system("du -shx "$1) というコマンドで/以下のフォルダごとの容量を表示させると、下記のようになります。 find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments. 1.4G / 920M /usr 72K /dev 4.0K /net 4.0K /opt 15M /sbin 160M /var 12K /tmp 4.0K /.dev.static 8.0K /lib64 4.0K /srv 8.8G /home 255M /lib 5.0M /bin du: `/proc/5261/task': そのようなファイルやディレクトリはありません du: `/proc/5261/fd': そのようなファイルやディレクトリはありません 897M /proc 4.0K /media 20K /mnt 16K /lost+found 4.2M /root 0 /sys 4.0K /initrd 30M /etc 4.0K /misc 4.0K /selinux 15M /boot 5.8G /backup /の下は、duの結果にあるような、トータル7637292の容量を消費しているよう状態に見えません。何が問題なのでしょうか。確認すべき点を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yakan9
  • ベストアンサー率54% (2200/4047)
回答No.2

> 何が問題なのでしょうか。確認すべき点を教えてください。 前回の質問にも記載しましたが、ファイルシステムの管理テーブルを調査されることです。 ファイルを管理する上で何が必要なのか、 それらを管理すべきテーブルは、フォルダ毎、ファイル毎、それらの上位でまとめられた管理テーブルと、 Tree構造で管理されます。 よって、これらの管理テーブルのロスをいかにして見出し、追加容量として見える形にしていくのかだと思います。 > /下は本来5GBくらいは空いているはずではないかと思うのですが 質問の容量をK単位のものと、M単位のものを加えた容量を計算され、K単位のものが、160KB、 M単位のものが、2,286.2MBと計算されたものと思われます。 この値を単純に、7.6GBと比べて5GBはどこへ行ったといわれているのだと思います。 前回と同様に、dfコマンドで、フォルダ毎、ファイル毎にコマントで、そこで発生した管理テーブルロスを加えていくことになると思います。 しかし、そんな操作は不可能に近いので、フォルダに対しての管理テーブル容量(a)、ファイルに対しての管理テーブル容量(b)を調査します。 システムの全フォルダ数 X a = フォルダに対する管理テーブル量 システムの全ファイル数 X b = ファイルに対する管理テーブル量 a,bは、セクター単位だから、4KBの整数倍と思われます。 例えば、aとbは、4KBという最少数と仮定してどの程度の管理テーブルが必要でしよう。 5GBを使うためには、1,250,000個のフォルダとファイルがあることになります。多分これよりは少ないと思われます。 ではその他に必要な領域はというと、 バットセクタの代替用領域、各フォルダの予備領域等です。 参考になるかどうかは分かりませんが、フォルダ毎、ファイル毎の管理項目の一覧が下記にあります。 ファイルシステムの違いはありますが大きな差はないと思われます。 http://jiten.biglobe.ne.jp/j/42/4e/a5/52136b443063646b117bd9e9b40c419b.htm 単純にファイルを格納するためだけではありません。 格納し、管理し、検索し、リンクの前と後ろのつながり、領域の使用、未使用、復旧のための情報等の管理テーブルを含むことを忘れてはなりません。

mikkiychan
質問者

お礼

こんなに丁寧にご説明いただきまして、どうもありがとうございます。 大変勉強になりました。

その他の回答 (3)

  • yakan9
  • ベストアンサー率54% (2200/4047)
回答No.4

もう一つミスを見つけてしまいました。 > a,bは、セクター単位だから、4KBの整数倍と思われます。 ファイルシステムがext3の場合、4KBではなく、512Bですね。 ごめんなさい。

mikkiychan
質問者

お礼

どうもありがとうございます。

  • yakan9
  • ベストアンサー率54% (2200/4047)
回答No.3

回答No.2で、少し訂正しておきます。 ファイル管理テーブルで、ファイル管理テーブルのひとつのセクタ内にデータが入るような小さなファイルであれば、 ファイル管理テーブルとデータ格納領域で、1セクターしか使用しない場合があることです。 すなわち、一ファイル、一セクターですむ場合があるということです。 下記が参考になるかもしれません。 http://wiki.bit-hive.com/linuxkernelmemo/pg/Ext2%20FS

mikkiychan
質問者

お礼

どうもありがとうございます。

回答No.1

すでにファイルが存在しているディレクトリーに対してmountすると 、 既存のファイルが見えなくなり、du の対象外になってしまいます。 もしかして、そういった状態で、ディスクを消費しているが見えない状態になっているかもしれないので、 たとえば/homeとか/backupをumount してから、 そのフォルダーをduやlsしてみてはどうでしょう?

mikkiychan
質問者

お礼

どうもありがとうございます。

関連するQ&A

  • linux dfとduでdisk使用量が大きく違う

    お世話になります。 CentOS 6.2にてdfコマンドを使用したdisk使用量とduコマンドを使用したdisk使用量とで 結果が大きく異なります。 以下がコマンド実行時の結果です。何が考えられますでしょうか? ------------------------------------------------------------ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/root 146G 138G 12M 100% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/sda1 485M 36M 424M 8% /boot /dev/mapper/data 158G 1.4G 148G 1% /data /dev/mapper/home 146G 188M 138G 1% /home /dev/sdb1 1.8T 527M 1.7T 1% /mnt/usbhdd ------------------------------------------------------------ du -sh ./* 7.5M ./bin 26M ./boot 1.2G ./data 232K ./dev 23M ./etc 110M ./ftproot 176K ./home 2.5M ./lha-1.14i-ac20050924p1 120M ./lib 24M ./lib64 16K ./lost+found 4.0K ./media 332M ./mnt 4.0K ./opt du: cannot access `./proc/4152/task/4152/fd/4': No such file or directory du: cannot access `./proc/4152/task/4152/fdinfo/4': No such file or directory du: cannot access `./proc/4152/fd/4': No such file or directory du: cannot access `./proc/4152/fdinfo/4': No such file or directory 0 ./proc 80K ./root 14M ./sbin 4.0K ./selinux 4.0K ./srv 0 ./sys 13M ./tmp 682M ./usr 2.2G ./var --------------------------------------------------------- 又、削除済みでつかんだファイルは以下の様に表示されました。 ls -al /proc/*/fd/* | grep deleted ls: cannot access /proc/4265/fd/255: No such file or directory ls: cannot access /proc/4265/fd/3: No such file or directory ls: cannot access /proc/self/fd/255: No such file or directory ls: cannot access /proc/self/fd/3: No such file or directory

  • RHELで、dfは123Gなのにduは61G、再起動しても変わらず

    "Red Hat Enterprise Linux ES release 4"を運用しています。 ディスク容量のチェック作業で、dfとduコマンドの結果が、どうも納得できない内容で困っています。 dfコマンドでの使用容量は123Gなのに対し、duコマンドでは61Gです。 dfとduの結果は、プロセスが起動したままの状態では、正しく反映されない等もある為、再起動を行いましたが、全く変わりません... <"df -h"の結果 ~ rootで実行> Filesystem サイズ 使用 残り 使用% マウント位置 /dev/mapper/VolGroup00-LogVol00 133G 123G 2.8G 98% / /dev/sda1 99M 26M 68M 28% /boot none 1.5G 0 1.5G 0% /dev/shm //192.168.xxx.xxx/bak$ 440G 121G 320G 28% /mnt/nas <"du -sh /*/"の結果 ~ rootで実行> 60M /bin/ 21M /boot/ 216K /dev/ 52M /etc/ 38M /home/ 8.0K /initrd/ 200M /lib/ 16K /lost+found/ 16K /media/ 8.0K /misc/ 26G /mnt/ 3.8M /opt/ 902M /proc/ 51M /root/ 17M /sbin/ 8.0K /selinux/ 8.0K /srv/ 0 /sys/ 72K /tftpboot/ 76K /tmp/ 2.3G /usr/ 32G /var/ 先日、運用しているアプリケーションから、「ディスク容量不足」の警告が出た為、dfの結果が正しいのではと思えるのですが、duに出ない幽霊ファイルを見付けきれません。 ひょっとしたら、ブロックサイズよりも小さいファイルが沢山あり、この様な自体になっているのかも?とも思いましたが、確証が得られません。 ("find . | wc -l"は、"610613") ファイルシステムが壊れているのかも!?とも思っています。 何か考えられる事があるでしょうか...? (残り容量が僅かで、焦っています)

  • Redhat Enterorise Linux3でディスク使用率が100%

    お世話になります、どなたかご教示いただけますと幸いです。 /homeの配下が100%になりました。 # df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/sda5 60G 60G 0 100% /home と表示されています。 不要ファイルを削除して # du /home -msh 12G /home と表示されますがdfコマンドだと、100%時の表示と同じで変わりません。 サーバを再起動せずにdfコマンドでも現在の使用量を正しく認識させるにはどのようにしたらよいのでしょうか? どうぞよろしくお願い致します。

  • /usrがいっぱいになって。mountやり方?

    VMでCentOS5.5をインストールしています。 Filesystemはこのようになっています。 [root@localhost]# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/sda2 3.8G 3.3G 347M 91% / /dev/sda5 14G 197M 13G 2% /home /dev/sda1 46M 24M 20M 55% /boot tmpfs 501M 0 501M 0% /dev/shm その中に、 [root@localhost ConnectDB]# du -hs /usr 2.8G /usr /usrが大き過ぎるため、Filesystemがそのその使えなくなるので、 /usrを/homeにmountしたいですが、どうすればいいでしょうか?

  • ドライブが空だとRedHat9 起動しません

    HL-DT-ST DVDRAM GMA-4020BというIDEのMULTIドライブ に、CDやDVD(中身問わない)が入っていないと、Boot時に、 Updating /etc/fstab で止まりOS(RedHat9)が起動しません。ドライブが空でも起動するにはどうすれば良いのでしょうか?(T_T) ■/etc/fstabは以下です。 LABEL=/ / ext3 defaults 1 1 LABEL=/boot /boot ext3 defaults 1 2 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 /dev/sda3 swap swap defaults 0 0 /dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0 /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0 ■df -k /dev/sda2 7637400 1478344 5771088 21% / /dev/sda1 101089 14521 81349 16% /boot none 127632 0 127632 0% /dev/shm

  • ルートパーティションを LVM にするには

    Redhat Enterprise Linux 4 や CentOS 4.x をデフォルトでインストールすると、root パーティションと swap が LVM で構成されるようになっているようで、空きディスクを利用して既存の OS を LVM 構成にしようとしていますがうまく行きません。 ディスク構成は、SCSI 接続のディスクが2本あり、現在は /dev/sdb のみに RHEL 4 for x86-64 がインストールされています。(LVM は使用していない) これをゴッソリと /dev/sda に移動したいと考えています。そして、この際にパーティションを切り直し、/dev/sda1 : /boot、/dev/sda2 は LVM を使用して / と swap に割り当てたいと考えています。 /dev/sdb から起動し、/dev/sda2 を LVM 構成にした後、 # mount /dev/VolGroup00/LogVol00 /mnt # mount /dev/sda1 /mnt/boot # cp -a /bin /boot /dev /etc /home /initrd /lib /lib64 /misc /opt /root /sbin /usr /var /mnt # mkdir -p /mnt/mnt /mnt/proc /mnt/selinux /mnt/sys /mnt/tmp /mnt/srv として、initrd の再作成し、/etc/fstab を書き換えて再起動すると以下のようなメッセージが表示されて起動できません。 Red Hat nash version 4.1.18 starting mount: error 6 mounting ext3 mount: error 2 mounting none switchroot: mount failed: 22 umount /initrd/dev failed: 2 Kernel panic - not syncing: Attempted to kill init! /dev/sdb から起動すると問題なく起動できるようですし、/dev/sda に新規に OS をインストールした場合も正常に起動できるようなので、/dev/sda が壊れていることは考えにくく、設定上の問題があると考えています。 上記について問題点をご指摘いただけないでしょうか。 よろしくお願いいたします。

  • linuxのディスクパーティション

    CentOS6.3を、500GBのHDDにインストールしました。 インストール時にハードドライブのパーティションレイアウトを 「選択したドライブ上のすべてのパーティションを削除してデフォルトレイアウトを作成します。」 を選択して、minimalインストールをしました。 インストール完了後、df -hで確認したところ、以下のようなディスクレイアウトになっていました。 Filesystem            Size Used Avail Use% マウント位置 /dev/mapper/vg_cent-lv_root 50G 2.6G 45G 6% / tmpfs             3.9G 0 3.9G 0% /dev/shm /dev/sda1           485M 32M 429M 7% /boot /dev/mapper/vg_cent-lv_home 237G 602M 224G 1% /home / サイズが若干小さいと感じています。 /var/logに大きさなサイズのlogが出来るため、100G位あればいいかなと思っています。 <質問> 「/dev/mapper/vg_cent-lv_home 237G 602M 224G 1% /home」 から、50Gぐらいを「/dev/mapper/vg_cent-lv_root」に移す?増やす? /     …100G /home …170G したりすることは出来る物でしょうか? ご教授お願いします。

  • sda1下にディレクトリを作るやりがわかりません

    外付けUSB ドライブを接続しました。 サーバーの状態はdfコマンドで以下のとおりです。 Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/hda1 74342940 3729568 66836896 6% / tmpfs 514252 0 514252 0% /lib/init/rw udev 10240 60 10180 1% /dev tmpfs 514252 0 514252 0% /dev/shm /dev/sda1 153834852 192072 145828364 1% /media/usbdisk hda1をそっくりsda1にバックアップしておいて、後は更新ファイルだけを日々更新したいので、rsyncコマンドを使おうと思います。 その書式は rsync -a [バックアップ元][バックアップ先] なのですが [バックアップ先]に dev/sda1/backup を指定したいのに、 sda1下にbuckupというディレクトリを作るやりがわかりません。 教えてください。 また、ディレクトリが出来たとして具体的に rsync -a [dev/hda] [dev/sda1/backup] と書けば良いのでしょうか?  初歩的疑問なのは承知しているのですが、本当に困っていますので 回答よろしくお願いします。

  • Debian lennyでディスク容量を圧迫して困っています。

    Debian lennyでディスク容量を圧迫して困っています。 OSは Debian GNU/Linux 5.0.0 になります。 webアプリが動作しています。 logなのかわかりませんが、ここ2週間ほどで、ディスク容量が足らなくなってしまっています。(約2週間前にも同様の事例が起こり、とりあえずバックアップしてあったファイルを数GB削除し使用率を80%まで下げました。) 何が原因で容量を使ってしまっているのか、 調査方法を教えていただけると助かります。 現在の使用率は以下です。 xxxxx$ df -la Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/sda1 7850996 7208256 243928 97% / tmpfs 193124 0 193124 0% /lib/init/rw proc 0 0 0 - /proc sysfs 0 0 0 - /sys udev 10240 80 10160 1% /dev tmpfs 193124 0 193124 0% /dev/shm devpts 0 0 0 - /dev/pts 素人なので稚拙な質問で申し訳ありません。 よろしくお願い致します。

  • fstab に記載してもマウントされません

    Debianですが /etc/fstabの内容は次のとおりです。 proc /proc proc defaults 0 0 /dev/sda1 / ext3 defaults,errors=remount -ro 0 1 /dev/sdb1 / ext3 defaults -ro 0 1 です。 これで起動しますと「sda」はファイルシステムとして通常にアクセスできますが、「sdb」は #mount /dev/sdb /mnt/sdb としないとマウントできません。 また、書き込みが出来ません。 自動でマウントする方法と書き込み可能にする方法を教えてください。