LinuxでWindowsのスキャンディスクのような機能を利用するには

  • Windowsのスキャンディスクに近いのはfsck。fsckはファイルシステムのチェックと修復を行うコマンド。


    でGNOMEターミナルを起動し、

    sudo touch /forcefsck

    というコマンドを実行すると、/(ルートフォルダ)にforcefsckという名の空のファイルが作成される。そのままUbuntuを終了すると次にUbuntuをブートした時に、/etc/fstabに書かれているパーティションに対してfsckが実行される。

HDDの不良セクタ(不良ブロック)をチェックする

  • HDDは使用しているうちに不良セクタが発生し、ファイルが破損したりOSが不安定になる場合がある。不良セクタがあるかチェックするにはbadblocksコマンドを使用する。


    でGNOMEターミナルを起動し、

    df

    とコマンドを打つかもしくは

    sudo fdisk -l

    とコマンドを打ってデバイス名を確認する。UbuntuではHDDはsda、sdb、sdc、sd(略)などの名前で識別される。

    sudo badblocks -vs -o bad.txt /dev/デバイス名

    とコマンドを打つと不良セクタのチェックが始まる(かなり時間がかかる。500GBで一時間以上)。-vオプションは詳細表示、-sオプションは進捗状況表示、-o ファイル名オプションは不良セクタ番号をファイルに出力する。このコマンドはマウント状態で実行可能(ただし-wオプションを付けるとファイルを破壊するので注意。その場合は必ずアンマウントしてから実行する)。不良セクタが無かった場合、

    Pass completed, 0 bad blocks found.

    と出力されて終了する。不良セクタがあった場合、bad.txtに出力されるので、

    sudo umount /dev/デバイス名

    とコマンドを打ってそのHDDを一旦アンマウントし、

    sudo fsck -l bad.txt /dev/デバイス名

    とコマンドを打つことで、出力されたセクタ番号を使用しないように設定できる。

    不良セクタが大量にある場合はHDDの寿命が近づいているかもしれないので早急にバックアップを取った方がよい。また購入したばかりのHDDから大量の不良セクタが検出された場合は初期不良の可能性がある。

    ※フォーマットをし直すと不良セクタが消える場合もあるらしい。

内蔵HDDを増設する・CUI編(ext3形式、単一のパーティションでフォーマット)

  • まず、パソコンの電源を入れる前にパソコンのケースを開けてHDDを取り付ける。次にパソコンを起動し、普段使用しているユーザでログインする。


    でGNOMEターミナルを起動し、

    sudo fdisk -l

    とコマンドを実行すると、HDDの情報が表示される。/dev/sd*(*は環境によって変わる。例えば増設したHDDが2台目のHDDならsdb)と認識されるので、どれが増設したHDDか確認した上で以下のコマンドを実行してフォーマットする。

    sudo mkfs.ext3 -c /dev/デバイス名

    -cオプションをつけると不良セクタのチェックを行い、不良セクタを発見した場合はそのセクタを使用しないようにする。-cオプションを付けるとHDDの容量によってはかなり時間がかかるので注意。

    フォーマットが終わったらfsckのタイミングを変更する。HDDの容量によって異なるが、大抵の場合30回前後マウントするとUbuntu起動時に自動的にfsckが実行されるよう設定されているのでターミナルで、

    sudo tune2fs -c 1024 /dev/デバイス名

    と実行してチェック回数を1024に、

    sudo tune2fs -i 0 /dev/デバイス名

    と実行してチェック期間を0にする。なおtune2fsはHDDをマウントしている状態で実行するとファイルシステムを破損する可能性があるそうなのでかならずアンマウント状態で実行する。

    次に、パソコンを起動した時に自動的にマウントされるように設定する。ターミナルで、

    sudo blkid /dev/sd*

    と実行してHDDのUUIDを確認、

    sudo mkdir /mnt/フォルダ名

    と実行して/mnt以下にフォルダを作成し、

    sudo leafpad /etc/fstab

    と実行してfstabをテキストエディタで開き、末尾に
    UUID=先ほど確認した文字列	/mnt/フォルダ名	ext3	relatime	0	2
    
    と書いて保存。0とか2とかの数字の意味は@ITの記事を読むと分かる。

    そのままだと書き込みできないのでアクセス権を変更する。ターミナルで

    sudo chmod 777 /mnt/フォルダ名

    と実行して先ほど作成したフォルダに誰でも読み書きできるようにする。後はパソコンを再起動するか、ターミナルで

    sudo mount -a

    とコマンドを実行するなりすれば増設したHDDがマウントされる。

内蔵HDDを増設する・GUI編

  • まず、パソコンの電源を入れる前にパソコンのケースを開けてHDDを取り付ける。次にパソコンを起動し、普段使用しているユーザでログインする。

    でgpartedを検索し、Gnome Partition Editorをインストールする。

    を起動し、ツールバーの右にあるメニューをクリックして増設したHDDに変更(スクリーンショット1)。未アロケートとなっている行を右クリックして新規を選択、パーティションテーブルを作成する。再度右クリックして新規を選択、新しいサイズ(メビバイト)で容量を決め、種類をプライマリパーティションに、ファイルシステムをext3に、Labelに適当な文字列を入力して追加ボタンを押す(スクリーンショット2)。プライマリパーティションは最大で4個までしか作成できないらしいので注意。

    を選択するとフォーマットが始まる(スクリーンショット3)。

    フォーマット終了後、場所 > コンピュータから増設したHDDにアクセスするとマウントされる。

    起動時に自動的にマウントするようにするには/etc/fstabを編集する必要がある。その場合PySDMを使用すればGUIでfstabを編集することが可能らしい。

    関連:fstabをGUIで編集・設定できる「PySDM」

    パーティション・エディタでフォーマットした場合、フォーマット時に不良セクタをチェックしないので、初期不良などが気になる場合はフォーマット後に手動でbadblocksコマンドを実行する(関連:HDDの不良セクタ(不良ブロック)をチェックする)。

/(ルートパーティション)が割り当てられたHDDのfsckの間隔を変更する

  • ファイルシステムがext3の場合、UbuntuはHDDを数十回マウントする(電源をいれてUbuntuを起動する)と、自動的に起動時にfsckを実行するようになっている。デスクトップPCとして使っている場合すぐにその上限に達して頻繁にfsckが行われることになるので、その間隔を変更する。まずパソコンを起動し、OS選択画面でUbuntuをrecovery modeで起動する(GUIが立ち上がらず、真っ黒なコンソール画面のまま起動する)。するとrootで起動するので、

    init 1

    とコマンドを打ってシングルユーザモードになり、

    mount -o remount -rn /

    のコマンドで、/をリードオンリーで再マウントする。

    df

    で/が割り当てられたHDDを確認し、

    tune2fs -c 1024 /dev/デバイス名

    とコマンドを打って、fsckまでのマウント回数の上限を1024に、

    tune2fs -i 0 /dev/デバイス名

    とコマンドを打ってfsckまでの期間を0にする。後は、

    reboot

    コマンドでパソコンを再起動する。

外付けHDDのfsckの間隔を変更する

  • ファイルシステムがext3の場合、Ubuntuはハードディスクドライブを数十回マウントする(外付けHDDの電源をいれてUbuntu PCに接続する)と、自動的にfsckを実行する。デスクトップPCとして使っている場合すぐにその上限に達して頻繁にfsckが行われることになるので、その間隔を変更する。

    まず外付けHDDを接続する。自動的にマウントされてデスクトップにアイコンが表示されたら、アイコンを右クリックしてデバイス名を確認(ウチでは/dev/sdcとなっていた)。もう一度アイコンを右クリックしてアンマウント。次にGNOMEターミナルを起動して、

    sudo tune2fs -l /dev/デバイス名

    とコマンドを打って外付けHDDの詳細を確認し、

    sudo tune2fs -c 1024 /dev/デバイス名

    とコマンドを打って、fsckまでのマウント回数の上限を1024に、

    sudo tune2fs -i 0 /dev/デバイス名

    とコマンドを打ってfsckまでの期間を0にする。

fsckのログが保存されている場所は?

  • 432 :login:Penguin [sage] :2008/05/06(火) 15:04:19 ID:2IxhUcvZ
    質問!
    ext3 を使っています。
    マウント回数がある一定回数を超えると起動時に fsck が
    かかります。このような起動時の fsck の結果はどこかに
    残るのでしょうか? /var/log はチェック対象のディスクだし、
    そもそも起動時の fsck が走っているときにはまだマウント
    される前ですよね?
    
    434 :login:Penguin [sage] :2008/05/06(火) 15:48:20 ID:qFHhQRZS
    >>432
    自分のは/var/log/fsckの中に2個ファイルがあってそれがログになってましたよ。
    /のFSCKの結果とそれ以外のパーティーション。
    

USB外付けHDDにラベルを付ける

  • Linuxで外付けハードディスクドライブをext3などの形式でフォーマットした場合、デフォルトでは/media/disk/media/disk-1などにマウントされ、デバイス数によってマウント先が変わるようになっている。そのままだと不便な場合もあるので、毎回同じフォルダにマウントされるように設定を変更する。

    まず外付けHDDをパソコンに接続し、マウントされたら、


    でGNOMEターミナルを起動して、dfコマンドを実行するなどしてデバイス名とマウント先を確認。

    sudo e2label /dev/デバイス名 ラベル名

    とGNOMEターミナルで実行し、デスクトップのアイコンを右クリックしてアンマウントしてから、外付けHDDを接続し直すと、/media/ラベル名に外付けHDDがマウントされるようになる。

    e2labelコマンドは外付けHDDをマウントした状態でも実行可能。ラベル名には日本語も使用可能。

    参考:ボリュームラベルでUSBハードディスクの管理を効率化するには

USB外付けHDDに一般ユーザ権限で書き込みできるようにする

  • Linuxで外付けハードディスクドライブをext3などの形式でフォーマットした場合、デフォルトでは管理者権限が無いと書き込みできないようになっている。そのままでは色々と面倒なので一般ユーザでも書き込みできるように設定を変更する。

    まず外付けHDDをパソコンに接続し、マウントされたら、


    でGNOMEターミナルを起動して、dfコマンドを実行するなどしてデバイス名とマウント先を確認。

    sudo chown ユーザ名 /media/マウント先

    とGNOMEターミナルで実行してマウント先の所有者をrootからユーザに変更すればOK。再度接続し直しても設定は保持される。全てのユーザで書き込み可能にしたい場合はchmodコマンドを使う。

    sudo chmod 777 /media/マウント先

内蔵HDDの温度をチェックする

    内蔵HDDの温度を確認するには、hddtempコマンドを使用する。


    でhddtempで検索すれば見つかる。CUIでインストールする場合、


    でGNOMEターミナルを起動して、

    sudo apt-get install hddtemp

    と実行すればインストールできる。

    インストール時に設定に関していくつか聞かれる。それらは、

    sudo dpkg-reconfigure hddtemp

    というコマンドで再設定が可能。

    ※ウチの環境ではインストール時の設定中に何故か設定ウィンドウがクラッシュしたため上記コマンドで設定し直した。

    使い方は、GNOME端末で

    sudo hddtemp /dev/sd?

    と実行すればOK。全てのHDDの温度が以下のように表示される。
    /dev/sda: ST3250310AS: 40°C
    /dev/sdb: WDC WD5000AACS-00ZUB0: 35°C
    
    ※sguidをセットしている場合はsudoは必要なし
    ※?はワイルドカード

    設定でチェック間のインターバルを有効にし、起動時にhddtempデーモンを開始するようにした場合、GUIでHDDの温度を監視できる。


    でhardware sensor monitorをインストール(CUIでは

    sudo apt-get install sensors-applet

    でインストール)し、パネルを右クリックして、パネルへ追加を選択、hardware sensor monitorを追加すればOK。

    ※インターバルやデーモンを有効にしておくとGkrellMでもHDDの温度を取得できるようになるらしい

    参考:ubuntuでHDDの温度を計る。

フラグメンテーションが起きやすい状況は?(ext2/3の場合)

    461 :login:Penguin [sage] :2008/08/03(日) 07:45:50 ID:99giCKv0
    Q.ext2/3ファイルシステムはどのような状況下でフラグメンテーションが起きやすいか?
    A1.ファイル「同時書き込み」時
    A2.空き容量が比較的少ない状況で巨大なファイルが書き込まれる
    
    Q.それはどのような条件が考えられるか?
    A1.同時アクセス数、及び負荷の高いファイルサーバー、又はDB
    A2.動画ファイル等巨大なファイルを取り扱う環境
    
    Q1.同時アクセス数、及び負荷の高いディスクは最適化を積極的に行った方がいいか?
    A1.ext2/3ファイルシステムのブロック配置アルゴリズムに準拠したツールなら、
    定期メンテナンス時に使用するのもいいかも知れない
    しかし大概触らない方がよい
    
    Q2.動画ファイル等巨大なファイルを取り扱う環境ではどうか?
    A2.動画ファイル等は専用の異なったボリュームで扱えば全体への影響を回避できる
    
    これで満足かな?
    
    仮想マシン(VMWareとかね)なんかも結構断片化するらしいのでパーティション分けた方が無難か。

Ubuntuでのデフラグに関して

    Linuxにデフラグが無い理由というページによると、Linuxで一般的に使用されているファイルシステムは、Windowsのそれと違ってフラグメンテーションが発生しにくいようになっているらしい。独立行政法人 情報処理推進機構のレポート(pdf注意)のような報告例もあるが、デスクトップ用途の場合はそこまで気にしなくていいのではないかと思われる。

    2008年の時点でよく使用されているLinuxファイルシステムは、ext3・ReiserFS・JFS・XFS、辺りだと思われるが、デフラグツールが存在するのはXFSだけなので、デフラグを必要とする可能性がある場合はHDDをXFSでフォーマットしておく。

    関連:Ubuntu日本語フォーラム / デフラグはできますか?
    関連:Linux でハードディスクをデフラグ(XFS)
戻る
更新:2009年02月02日
作成:2008年04月22日