たけまるの日記

たけまるの日記です。web関係の技術ネタが多いですが、好きなことを適当に書いています。

さくらクラウドでルートパーティションの容量を拡張する方法

追記:この手順を実施する場合の注意を記事中下部に追加しました。

あけましておめでとうございます。

訳あってさくらクラウドを使うことになりました。

250Gのディスクを選択してVMを作成したのだけど、さくらが用意したCentOSのイメージ「[public] 20GB CentOS 6.6 64bit (基本セット)」で起動したらOS上で20Gしか認識されていない…。

それもそのはずで、OSイメージは20Gを前提に作成されたものでした。

別途「100G」というのも用意されていたのですが、今回は250Gにしたかったのでなんとか拡張してみました。

(クリティカルな操作なので自己責任で、バックアップ必須!)

VM作成

  1. 普通にVM作成
    • ディスクソース : [アーカイブ(簡単)]
    • アーカイブ選択 : [public] 20GB CentOS 6.6 64bit (基本セット)
    • ディスクサイズ : [20G]
    • 作成後すぐに起動 : [しない]

追加ディスクの作成(本命ディスク)

  1. 管理画面 [ストレージ] -> [追加]押下
  2. 以下設定
    • ティスクソース : [ブランク]
    • ディスクサイズ : [250GB]
    • 名前 : 「testvm-250G」
  3. [作成]押下

拡張作業

  1. 管理画面 [サーバ] -> 該当VMを選択 -> [詳細] -> [ディスク] -> [接続]押下
  2. [testvm-250G]を選択して[更新]
  3. 接続#1に元の[testvm]、接続#2に[testvm-250G]が接続されているのを確認する
  4. VM起動
  5. 以下コマンド実行
### 起動ドライブはvda、追加したドライブがvdbとして認識されている
# ls /dev/vd*
/dev/vda  /dev/vda1  /dev/vda2  /dev/vdb

### 中身をコピー(3分半程度、速い…!)
# dd if=/dev/vda of=/dev/vdb bs=512M

### パーティションの拡張
# parted /dev/vdb
(parted) unit s
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 524288000s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start     End        Size       File system     Name     Flags
 1      64s       8400487s   8400424s   linux-swap(v1)  primary
 2      8400488s  41943006s  33542519s  ext4            primary  boot

(parted) rm 2
(parted) mkpart primary 8400488s -1s

# ※途中パーティションを修復するか聞いてくるので、F(Fix)を選択する
# ※警告が出てきてもyes/Ignoreを選択して進む

(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 268GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name     Flags
 1      32.8kB  4301MB  4301MB  linux-swap(v1)  primary
 2      4301MB  268GB   264GB   ext4            primary
 
(parted) quit

# e2fsck -f /dev/vdb2
# resize2fs /dev/vdb2

一旦パーティションを削除して(!)、再度より大きいパーティションを作るというのがキモですね。こんな事して大丈夫なんですねえ。。

元ディスクをVMから外す、動作確認

  1. 該当VMをシャットダウン
  2. 管理画面 [サーバ] -> 該当VMを選択 -> [詳細] -> [ディスク] -> [接続]押下
  3. 元ディスク(接続#1)の▼を選択して[取外し]
  4. 該当VM起動
  5. 容量が増えてるか確認
  6. 必要なければ元のディスクは削除
[root@testvm ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda2       243G  1.4G  229G   1% /
tmpfs           499M     0  499M   0% /dev/shm

参考

http://knowledge.sakura.ad.jp/tech/925/

http://ubuntuforums.org/showthread.php?t=1389429

一応参考サイトと違うのは、参考サイトはMBRパーティションが切られているのでfdiskで作業していましたが、CentOS6のイメージだとGPTでパーティションを切っていたため、partedで作業しました。

最初参考サイトを見て、もうちょっとマシな方法がないかと調べたのですが結局この方法となりました。 なんかもうちょっといい方法はないものでしょうかねえ。。

さくらクラウドについて思ったこと

  • さくらVPSと比べると割高
  • さくらVPSが優秀過ぎる
  • とはいえさくらVPSはスケールアップができないのでその点は安心感がある
  • さくらVPSとローカルネットワークが繋がれば最高だけど戦略上しなそう
  • 石狩第一内のVPSクラウド(グローバルIP)間の通信はほぼ理論値通り(100Mbps)出た

追記 2015.2.2

この手順ではデータ不整合となる可能性について指摘を受けました。

よく見ると参考サイトのさくらナレッジでも下部に追記がありました(^^;;;

以下引用

[※編集部追記:本手順の際、ファイルシステムをマウント中のまま dd するとコピー先で不整合が発生する可能性があるため、レスキューモードもしくはシングルユーザーモードで実行ください]

確かに起動中のパーティションをddでコピーする場合、作業中に他のプロセスがディスクを書き込む可能性があるため、データ整合性を保証できない可能性があります。私は検証環境として手軽に用意したかったので問題ないですが、ミッションクリティカルな用途の場合は正攻法で行ったほうがいいと思います。

sshを繋ぎっぱなしにするautossh for mac

sshって結構切れます。 特に一定時間何もコマンドを打っていなかったり、画面に変化がないようなアイドル時間が一定以上続くと切れます。 sshをトンネリングで使っていると切れると困るので、切れても自動で再接続してくれるようにしましょう。

まずはHomebrewでautosshをインストール。

$ brew install autossh

あとは以下のコマンドを打つだけ。

$ autossh -f -M 0 -N -D 1080 -o "ServerAliveInterval 45" -o "ServerAliveCountMax 2" user@host

簡単にオプションについて

  • -f バックグラウンドで動かす

  • -M 0 よくわからんのでおまじない的

autosshの他、以下のように透過的にsshのオプションを指定できる

  • -N シェルを使わない

  • -D 指定ポートでSocks5として振る舞う autosshを使う最大の目的

  • -o sshのパラメータを指定 詳細は以下

  • ServerAliveInterval 45 切断防止のため、指定秒数間隔で応答確認をする

  • ServerAliveCountMax 2 指定回数応答がない場合は切断する(その場合autosshが再接続する)

autosshの終了

$ killall autossh

macにhomebrewでPHP5.6環境をインストールしてみる

してみました。

環境はYosemite(10.10)なのですが、OS標準だとPHP5.5のようです。 Homebrewを使い、PHP5.6を使えるようにします。

なお、Homebrewは入っている前提とします。

事前にXCode(現時点で最新6.1)をインストールし、以下コマンドを実行しておきます。

$ xcode-select --install

brewを最新の状態にします

$ brew update
$ brew upgrade

必要なレポジトリを追加します

$ brew tap homebrew/php
$ brew tap homebrew/dupes

以下コマンドでPHP5.6をインストールします 尚、apacheはOS標準のものを使いました

$ brew install php56 --with-apxs2=/usr/sbin/apxs

これでコマンド上からPHP5.6が使えるはずです

$ php -v
PHP 5.6.3 (cli) (built: Nov 27 2014 22:30:22) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies

ApacheからPHP5.6を使うように書き換えます(/etc/httpd/conf/httpd.conf)

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

Apache経由でphpinfo()を表示させると、PHP5.6が動いているのが確認できました

f:id:takemaru123:20141127224025p:plain

参考

postfixのメールキューを書き換える

注:最終的には諦めてますので有用な情報はそれほどありません

最近のメールサーバーは大体、senderにちゃんと正引きできるドメインが設定されていないと受信拒否されてしまいます。 こちらからメール送信する際、hostnameの設定をしないでメール送信をしてしまい、senderが「xxx@localhost.localdomain」という状態になってしまい、相手のメールサーバーに受取拒否され、「/var/spool/postfix/deferred」にたまっている状態となっておりました。

これをなんとか送信しようというお話。

postfixのメールキューの形式は完全に独自形式のようで、人間が読めるように変換して出力するpostcatというコマンドが用意されています。

$ mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
F2180160222      549 Thu Nov 13 20:13:20  xxx@localhost.localdomain

まずこんな感じでキューIDを調べます この場合「F2180160222」ですね

postcat -q F2180160222
*** ENVELOPE RECORDS deferred/F/F2180160222 ***
message_size:             549             179               1               0             549
message_arrival_time: Thu Nov 13 20:13:20 2014
create_time: Thu Nov 13 20:13:20 2014
named_attribute: rewrite_context=local
sender_fullname: 
sender: xxx@localhost.localdomain
*** MESSAGE CONTENTS deferred/F/F2180160222 ***
Received: by localhost.localdomain (Postfix, from userid 501)
    id F2180160222; Thu, 13 Nov 2014 20:13:20 +0900 (JST)
To: hogehoge@gmail.com
Subject: test
From: xxx@localhost.localdomain
Date: Thu, 13 Nov 2014 20:13:20 +0900
Message-ID: <54649250690447cea26330707f000101@localhost>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

message


*** HEADER EXTRACTED deferred/F/F2180160222 ***
original_recipient: xxx@localhost.localdomain
recipient: xxx@localhost.localdomain
*** MESSAGE FILE END deferred/F/F2180160222 ***

こんな感じでキューのメールを読むことができます

送信できなかったものについてはsenderのlocalhost.localdomain部分を実在するドメインに無理やりsedで書き換えて送信しました。その場合、アドレス全体の文字数は変えてはいけないようです。フォーマットを解析しようとpostfixのソースもちょっと見たのですが、根が深そうだったので断念しました。

カゴヤのVPSは使うな

ゴヤVPS複数台借りて運用していたのですが、いきなり以下のようなメールが来て大半のインスタンスを停止されました。

カゴヤ・ジャパン サポートセンター (担当者名) です。
平素は当社サービスをご利用いただき誠にありがとうございます。

2014-XX-XX XX:XX 頃、下記Xインスタンスの負荷が著しいために
同ホスト機内にある他のお客様サイトへの影響がございました。

XXXXX インスタンス名 IPアドレス
…(台数分)…

つきましては誠に遺憾ながら上記インスタンスを停止いたしました。
お手数とは存じますが、サイトのお見直しをお願いいたします。

※サイトをお見直しいただきます際には、Apacheを停止しておく、
 アクセス制限を施すなどを行った上でご確認ください。

ご了承のほどよろしくお願いいたします。

ご不明な点がございましたら、いつでもカゴヤ・ジャパン サポートセンターまで
お問い合わせください。

それでは今後ともどうぞよろしくお願いいたします。

普通この手のVPSって、高負荷になったら割り当てるCPU時間とかIO帯域で調整すると思っていたのですが、まさかインスタンス停止とは…。 さくらVPSでずっと高負荷かけても(リソース調整はあるにせよ)何も言われないのに…。 確かに料金を日割りできるなどメリットはありますが、ちょっとケチってコレじゃ割にあわないです。 最初からさくら借りとけばよかった。

金輪際KAGOYAは使わないですし、今カゴヤVPS利用を考えているなら全力で再考をお勧めします。 さくらを借りましょう。(ステマ)

MH4Gがダウンロードできない!? macで3DSのSDカードをフォーマットする方法

皆さん元気に狩ってますか!

いよいよモンスターハンター4Gが発売されましたね!!

早速ダウンロードしようとしたら、SDカードのブロックが足りないと言われDLできず。

よく見たら3DS買った時についてきた4GのSDがそのまま挿さってました(;´Д`)

そんなわけでそのへんに転がっていた32GのSDに載せ替えます。 とりあえずネットで軽く検索したら、PCでSDカードの中身をまるっとコピーすれば移行できそうなのでやってみました。ところが…。

f:id:takemaru123:20141011114013j:plain

「SDカードが認識できないためSDカードに入っているソフトを表示できません。」と表示され認識されず…。

f:id:takemaru123:20141011113558p:plain

何が悪かったかというと、mac3DS用のSDカードをフォーマットするときは「MS-DOS(FAT)」を選択しなければならない事でした。通常SDカードをフォーマットするときは「exFAT」を選びがちなので、注意が必要です。

f:id:takemaru123:20141011115249p:plain

その後、Finderから一度旧SDの中身をmacにコピーして、新しいSDにコピーしなおせば問題なく認識されました!

f:id:takemaru123:20141011114009j:plain

ちなみに今回使ったSDカードはこちら。 こんな値段なのに3DSで使える最大容量で、転送速度も早いのでロードが早くなってとても快適です。 容量不足でお困りの方は是非ご検討ください。

国内のVPSサービスを、主にディスク容量とinode数の面からコスト調査してみた

対象はさくらVPS、カゴヤVPSDTIのServersMan@VPSです

サービス名 プラン 仮想化タイプ 月額(税込,年契約) 容量(kB) inode数 容量単価(円/GB) inode単価(円/1万inode) 容量(kB)/inode
さくらVPS 1G KVM 924 100,893,076 6,414,336 9.60 1.44 15.73
さくらVPS 2G KVM 1,396 204,105,516 12,967,936 7.17 1.08 15.74
ゴヤVPS タイプA OpenVZ 864 209,715,200 3,904,333 4.32 2.21 53.71
ゴヤVPS タイプB OpenVZ 1,728 419,430,400 7,808,667 4.32 2.21 53.71
ゴヤVPS タイプC OpenVZ 3,456 838,860,800 15,493,388 4.32 2.23 54.14
ServersMan@VPS Entry OpenVZ 504 52,428,800 3,000,000 10.09 1.68 17.48
ServersMan@VPS Standard OpenVZ 1,009 104,857,600 6,000,000 10.09 1.68 17.48
ServersMan@VPS Pro OpenVZ 2,037 209,715,200 12,000,000 10.18 1.70 17.48

※2014/10/10時点
※グレーアウト部分は予測値

考察

  • 単純に容量が欲しい場合はカゴヤVPSがGB単価4.32円/月と大変優秀、1ファイルが大きいコンテンツ(画像や動画)を置くには良さげ
  • しかし小さいファイルを沢山置くような必要がある場合、inode単価でみると一番悪い
  • 1ファイルが50kB以下の場合、ディスク容量を使いきる前にinodeを使い切る計算
  • さくらVPSの2Gプランであればinode単価が一番安く、15kB以上であればディスクをフルに使える

VPSのディスクのサイジングを考える場合、容量だけではなくinodeにも注意する必要がある。

さくらVPSの特徴

  • 長所 : 一番直感的に使える普通のLinuxマシン
  • 長所 : 国内3箇所のリージョンから選べる
  • 長所 : 同一リージョン内のVPS同士でローカルネットワークが組める(eth0はグローバルIP、eth1,eth2はローカルNWとして好きに使える)
  • 短所 : 後からのスケールアップが不可能(したけりゃさくらクラウド使えって事なんだろうけど)

kagoya vpsの特徴

  • 長所 : インスタンスのスケールアップ・ダウン(CPUコア数、メモリー容量、ディスク容量)をダウンタイム無しでできる
  • 長所 : 料金が1日単位
  • 短所 : OpenVSなのでちょっと特殊なこと(カーネルモジュール追加等)は何もできない
  • 短所 : ファイルシステム関係も何もいじれない
  • 短所 : fuseやloopマウント等も不可

DTI VPSの特徴

  • 長所 : 1インスタンス単価が最安
  • 短所 : OpenVZなのでkagoyaの短所と基本的に一緒

ちなみにOpenVZなカゴヤVPSで何とかinodeを増やそうと、ファイルをext4でフォーマットしてmount -o loopしようとしましたが、loopデバイスの使用が制限されていて(?)実現できませんでした。 同じ理由でFUSEデバイスも制限されていて、そちらのアプローチもムリでした。

まだ試していませんが、恐らくさくらVPSであれば上記の手法が使えるのではと思っています。 #そのうちやる

結論

結局さくらVPS最強。