Rock'n'Hack ブログ

それなりハッカーを目指して、もろもろのメモ。bloggerから引っ越しました。

s3cmd を用いた s3内における複数ファイル移動ワンライナー


s3に格納している大量のファイルを別のパスに移す必要があり、
Webコンソールでディレクトリのカット&ペーストでやろうとしたのですが、
途中で何度やり直してもエラーになってしまい、困ってしまいました。

しょうがないからs3cmdを用いて1ファイルずつ移動したので、後々のためにコマンドをメモ。


for i in `s3cmd ls s3://バケット名/元ファイルがあるディレクトリパス/ | awk '{ print $4 }'`; do s3cmd mv $i s3://バケット名/移動先のディレクトリパス/ ; done

実行後に、そういえば s3cmd でディレクトリのカット&ペーストって出来ないのかな…
って思いましたが、特に試してません(笑)


おしまい。

Macのメモアプリのデフォルトフォントを追加する


ちょっとしたメモを取る時に結構Macのデフォルトのメモアプリを使ってます。
Evernoteでもいいけどそこまでする必要もないみたいな時とかですかね。

UIが気に入らなくて使ってなかったのですが、Googleと同期するとパッと開けて
iPhoneとか他のデバイスと同期がとれて意外と便利です。

ただ、色々注文付けたいところはある中で、どうしても気に入らなかった点が一つ。
フォントが気に入らない。


デフォルトフォントがなぜか4種

デフォルトのフォントは変更出来るのですが、なぜか下記4つしかない。

なぜだ…自分はほんとになんでもないコードの断片とか、ログとかを一時的に
貼り付けたりしてるから、等幅フォントじゃないと嫌なんだよ…。

なぜこれしかないのか謎ですが、それならそれでしょうがないので追加方法を調べました。


パッケージ内のファイルを修正

こちら↓のサイトを参考にしました。

Add Default Fonts To Notes In OS X Mountain Lion [Video How-To]

動画を見るとGUIで色々やってたのですが、面倒だったのでコマンドでやりました。

$ cd /Applications/Notes.app/Contents/Resources/ja.lproj
$ sudo vim DefaultFonts.plist
Password:パスワードを入力

で、下記のように編集






FontName
HiraMaruProN-W4
Size
15


FontName
HiraMinProN-W3
Size
15


FontName
HiraKakuProN-W3
Size
14

ここから追加 ---->

FontName
Ricty(好きなフォント名)
Size
12(好きなフォントサイズ)

<---- ここまで


これで、めでたくデフォルトフォントを追加出来ました。


おしまい。

Jenkinsを動かしてるサーバで No space left on device となった話


ちょっと前の話ですが、ある日突然Jenkinsのジョブが突然全て実行出来ないようになりました。

結果、解決方法自体はごく簡単なものだったのですが、結構ハマったのでメモとして残しておきます。


ある夜の出来事

ふとスマホを眺めると、Jenkinsから大量のジョブ失敗メールが来ていました。

メッセージのログを見てみると、 No space left on device の文字。

どうやらストレージがいっぱいになってしまった模様。
確かにそのサーバは運用系のジョブしか動かしてないからストレージはほとんど積んでいませんでした。

事務所戻ったら見てみよう。
と、気楽な感じで構えてました。


ディスク容量はまだ空いているのに No space left on device…?

サーバにログインし、ゴミファイルでも消そうと思い、まずは "df -h" とコマンドを打ってみると…

ん、まだ3GBくらい空いてる…?

普通にディスク容量はまだ余っていました。
経験豊富な方はきっとこの時点ですぐに他の可能性に気づくのだと思いますが、
自分は意味が分からず頭が「?」でいっぱいになりました。


適当な対応により状態悪化

とりあえず、Jenkinsを再起動してみるか…。

困ったときの再起動というWindows的な対処をしてみますが、
何度Jenkinsを上げなおそうとも、No space left on device は変わらず。

じゃあもうOSごとリブートしてみるか…。

と、何も考えずにOSをリブートしたのが運の尽きでした。

OSすら上がらなくなってしまいました。。


ちゃんと考える

冷や汗をかきながら、なんとかかんとかOSをブートしてちゃんと考えてみました。

  • ディスク容量は余裕があるものの、No space left on device が起きている。

  • 何度やってもジョブはこけるし、OSもブート出来なくなる。

  • ただし、ファイルを削除すると一旦はちゃんと動くようになる。

  • しかし、しばらくするとまた同様の現象が起きる。

なんとなくググってみるとこんな記事が見つかりました。

ディスク容量に余裕があるのに No space left on device エラーになる

これは…


原因:ファイルの作りすぎによる inode の不足

まさに記事の通りで、再度OSにログインしinodeを確認してみると…

$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 524288 524288 0 100% /
tmpfs 480574 1 480573 1% /dev/shm

ビンゴ、きれいに100%使いきってました。

inodeを使いきってしまうと、ファイルのメタデータを保持できなくなるため、
新規にファイルが作成できなくなるとのこと。

それで、No space left on device となっていました。
もうちょっと分かりやすいメッセージ出してほしい…というのは甘えですかね。

だから、ファイルを削除すると一時的に回復するんですね。
今までこんな事態に遭遇したことがなかったので全く考慮から漏れていました。

ただし、心当たりはすぐに浮かびました(苦笑)


起因:Jenkinsの"古いビルドの破棄"の設定が漏れていた

冒頭の方に書いたように、このJenkinsサーバでは主に運用系のジョブを回していました。

日次の処理やら何やらでとにかく朝から晩まで寝る間の無いほどこき使っていたわけです。

そしてその中のジョブのいくつかに、15分おきとかの周期で実行するものがありました。
※それがそもそもおかしいだろ、という意見はありますが(汗)

で、ほとんどのジョブは"古いビルドの破棄"オプションの設定をしていたものの、
いくつか漏れていたものがあり、それらのファイルが残ったままになってしまっていたため
inodeを使い果たしてしまった、というオチでした。

全てのジョブの設定を確認して、"古いビルドの破棄"の設定をしたところ下記の通り解決しました。

$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 524288 184505 339783 36% /
tmpfs 480574 1 480573 1% /dev/shm

ちなみに複数ジョブにまたがった設定を行なうのには、Configuration Slicing pluginを使いました。
これ無かったらしんどかった…感謝です。

自分のLinux力の無さを再認識するとともに、いい勉強になりました。

なにはともあれ、これでまたしばらく自分の代わりにJenkins氏が社畜モード全開で働いてくれそうです(笑)


おしまい。