• ベストアンサー

lnコマンド

先日 別の担当者よりFreeBSD4の管理を引き継いだのですが 異常にhomeの領域が小さいなと思ったら 我々の会社では通常/usr/homeに/homeがシンボリックリンクされているはずが外れていて/の直下を利用していました。 /usrは大きめに領域を取っているのですが /は数十MBしか容量がありません 容量不足でhomeに監査用ログも一時保管できないので リンクの貼り直しを実行しようと思うのですが 実稼動中にln -sってやっても実害ないのでしょうか? 24時間稼動でリブートできません。 /homeなので実行時のログインユーザだけ気をつければいい気がしますが 経験のある方 助言ください

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

移動中にファイルの書き換えなどの問題が発生しないように注意する必要があります。 処理の流れとしては、 1. 「(cd / && tar cf - home) | (cd /usr && tar xpvf -)」を実行(/home を /usr/home にコピー) 2. 「mv /home /home.old && ln -s /usr/home /home」を実行(リンクをはる) 3. 「rm -rf /home.old」を実行(旧ファイルの削除) って感じになります。1をコピーではなく移動にしてしまうと、移動中にログアウトしてしまったりしたら、ホームが存在しないユーザーではログインできなくなったりしますから、まずはコピーで行うのが重要です。 で、この1の最中に、すでにコピー後のディレクトリに読み書きが発生したら、その更新が反映されないことになります。 実稼働中にリブートする必要はありませんが、上記ファイル更新の発生を避けるためには「誰もログインしてない」だけでは不十分で、 「監査用ログも一時保管」のような、バックグラウンド処理のたぐいも止める必要があります。 まあ、通常はcron を止める(ディレクトリ移動前に「/etc/rc.d/cron stop」、リンクを張り終わってから「/etc/rc.d/cron start」)ぐらいで十分だと思いますが。 念のため、1のコピー終了後に、ちゃんとコピー取れたかどうか、 コピー後にファイル更新がなされてないかどうか、確認した方がいいでしょう。 0. コピー開始前に、「touch /tmp/timestamp_copy_start」を実行し、コピー開始時刻を記録しておく。 1. コピー実行 1.5. 「find /home -newer /tmp/timestamp_copy_start -print」で、コピー開始後に更新されたファイルを表示 って感じです。更新されたファイルが無いことを確認して、2.リンクの張り替えを実行。 その後、念のため 2.5. 再度「find /home.old -newer /tmp/timestamp_copy_start -print」を実行し、1.5以降に隙をついてファイル更新されてないことを確認 って感じで。 (厳密には、単に「新しいファイルが出来てない」かどうかの確認だけでは不十分で、本当は「ファイル削除なども含めて、まったく同一である」ところまで確認すべきですが、cron を止めて短時間で実行するなら、 上記ぐらいの処理でまず大丈夫だと思います。)

aix31
質問者

お礼

mtaka2さま 詳細な解説ありがとうございます。 色々や注意事項まで助言してくださって助かりました 実施してみます

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

FreeBSD4の当時であれば/home自体が数十MBでも特に少なすぎる とは言えなかったと思います。 HDDもまだまだ容量あたりの単価が高かったため。 実際ルート権限のログファイルは/var/logにおくのが妥当だと 思います。アプリケーションごとのログは場合によっては、 アプリケーションのprefix以下にvarを作ってログする場合も 多かったのですが、/home以下のユーザーディレクトリにどうしても 置きたい理由があるのでしょうか?

aix31
質問者

お礼

yamabejpさま ログファイルは/var以下に置かれているのですがhomeにログファイルを置いてログファイルのgrep等々で作業をしたかったのですが 容量がなく困っていました。 それにしてもFreeBSDは容量が少なくて安定稼動していて良いですね

関連するQ&A