Pistolfly のすべての投稿
サブドメインのmxレコード
/etc/fstabの記述ミスで起動できなくなった場合
fdiskでパーティションを削除した後、/etc/fstab に削除したパーティションのエントリを残したままサーバを再起動したところ、起動時のファイルシステムチェックでエラーになり、起動しなくなってしまった。
その対処方法。
- エラー画面でrootパスワードを入力してメンテナンスモードに入る。
-
/ が読み取り専用モードでマウントされているため、書き込み可能なようにマウントし直す。これをしないと、fstabを編集できない。
# mount -o remount,rw /
-
fstabの不要エントリ(実際には削除されているが、エントリに残っているディスクパーティション)を削除。
# nano /etc/fstab
- システムを再起動。
# shutdown -r now
さくらのクラウドでパーティションの移動
さくらのクラウドで、/homeディレクトリを追加ディスク内のパーティションに移動してみた。
まず、さくらのクラウドのコントロールパネルでディスクを追加してサーバに接続しておく。
下記では、追加したディスクは、/dev/hdb として認識されています。
移行の手順は以下の通り。
fdiskでパーティションを作成する
# fdisk /dev/hdb このディスクのシリンダ数は 2610 に設定されています。 間違いではないのですが、1024 を超えているため、以下の場合 に問題を生じうる事を確認しましょう: 1) ブート時に実行するソフトウェア (例. バージョンが古い LILO) 2) 別の OS のブートやパーティション作成ソフト (例. DOS FDISK, OS/2 FDISK) コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 1 最初 シリンダ (1-2610, default 1): Using default value 1 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-2610, default 2610): Using default value 2610 コマンド (m でヘルプ): p Disk /dev/hdb: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/hdb1 1 2610 20964793+ 83 Linux コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 警告: 領域テーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。 カーネルはまだ古いテーブルを使っています。 新しいテーブルは次回リブート時に使えるようになるでしょう。 ディスクを同期させます。
ここでいったんリブートする。
作成したパーティションにファイルシステムを作成する
# mkfs -t ext3 /dev/hdb1 mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 2621440 inodes, 5241198 blocks 262059 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 160 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
/mnt での新規ファイル・システムのマウント
いったん新しいディレクトリにマウントする。
ここでは、/mnt/newpart というディレクトリにマウントした。
# mkdir /mnt/newpart # mount /dev/hdb1 /mnt/newpart
このマウントは一時的なものなので、/etc/fstabには記述しない。
ファイルのコピー
ここからは、さくらのクラウドのコントロールパネルのコンソールで操作する。
まず、安全にファイルをコピーするために、シングルユーザモードにする。
# telinit 1
ファイルをコピーする。
# cd /home # cp -ax * /mnt/newpart/
マウントポイントの変更
# mv /home /home.old # mkdir /home # mount /dev/hdb1 /home
exitでシングルユーザモードを抜ける。
# exit
/etc/fstabの編集。
# nano /etc/fstab
/etc/fstab に以下の行を追加。
/dev/hdb1 /home ext3 defaults 1 2
再起動
再起動すると、/dev/hdb1 が /home のみにマウントされた状態になる。
確認。
$ df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/hda2 18G 8.8G 7.8G 53% / /dev/hda1 99M 18M 76M 20% /boot tmpfs 1006M 0 1006M 0% /dev/shm /dev/hdb1 20G 5.6G 14G 30% /home
元に戻す場合
問題があって元に戻す場合は、さくらのクラウドのコンソールでシングルユーザモードにして、/homeをumount後、/homeを削除、/home.oldを/homeにリネームすればよい。あと、/etc/fstab から/homeのマウントのエントリを削除するのを忘れずに。
/homeディレクトリをumountするとき、device is busy となってアンマウントできない場合は、
# umount -l /home
でアンマウントする。
パーティションの活用: /home の移動編
ITmedia エンタープライズ : Linux Tips「「/home/」などのディレクトリを,ほかのドライブ(パーティション)に移動したい」
マウントポイントの移動 - Linux on Titan700
さくらのクラウドでディスクを追加
さくらのクラウドでディスクを追加、サーバ(CentOS 5.7)に接続、マウントして使えるようにした。
ディスクの追加
まず、さくらのクラウドのコントロールパネルで、ディスクを追加して、サーバに接続しておく。
パーティションの作成
# fdisk -l Disk /dev/hda: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/hda1 * 1 13 104391 83 Linux /dev/hda2 14 2355 18812115 83 Linux /dev/hda3 2356 2610 2048287+ 82 Linux swap / Solaris Disk /dev/hdb: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes ディスク /dev/hdb は正常な領域テーブルを含んでいません
/dev/hdb が追加されているのが分かる。
fdiskの引数に追加したディスクのデバイスファイルのパス(/dev/hdb)を指定して実行。
# fdisk /dev/hdb デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも 含んでいません 新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。 このディスクのシリンダ数は 2610 に設定されています。 間違いではないのですが、1024 を超えているため、以下の場合 に問題を生じうる事を確認しましょう: 1) ブート時に実行するソフトウェア (例. バージョンが古い LILO) 2) 別の OS のブートやパーティション作成ソフト (例. DOS FDISK, OS/2 FDISK) 警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって 正常になります コマンド (m でヘルプ):
この警告は気にする必要はない。
続いてパーティションを作成する。
まず p コマンドで現在設定されているパーティションを確認。
コマンド (m でヘルプ): p Disk /dev/hdb: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System
パーティションはまだない。
n コマンドでパーティションを作成する。
基本領域を作成するので、コマンドアクションは「p」を指定。
領域番号は「1」を指定。
最初シリンダと終了シリンダはデフォルトでOK。
コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 1 最初 シリンダ (1-2610, default 1): Using default value 1 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-2610, default 2610): Using default value 2610
p コマンドでパーティションを確認。
コマンド (m でヘルプ): p Disk /dev/hdb: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/hdb1 1 2610 20964793+ 83 Linux
w コマンドで書き込む。
コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 警告: 領域テーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。 カーネルはまだ古いテーブルを使っています。 新しいテーブルは次回リブート時に使えるようになるでしょう。 ディスクを同期させます。
警告が出たので、ここでいったんリブートした。
パーティションをフォーマットする
# mkfs -t ext3 /dev/hdb1 mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 2621440 inodes, 5241198 blocks 262059 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 160 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 21 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
必要に応じて、tune2fsでfsckのタイミングを設定する。
tune2fs
マウント
マウントポイントを作成する。
# mkdir /backup
マウントを実行。
# mount /dev/hdb1 /backup
正しくマウントされているかを確認。
# mount /dev/hda2 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/hda1 on /boot type ext3 (rw) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/hdb1 on /backup type ext3 (rw)
システム起動時に自動マウントするようにするため、/etc/fstabに以下を追加する。
/dev/hdb1 /backup ext3 defaults 1 2
※万一、fstabの記述にミスがあった場合、ブートできなくなってしまう。
その場合は、コントロールパネルのコンソールでメンテナンスモードに入り、fstabを修正して、リブートする。
手順は以下を参照。
/etc/fstabの記述ミスで起動できなくなった場合
Cの宣言の読み方
Cの型宣言は読みにくい。
「例解UNIXプログラミング教室」(冨永和人、権藤 克彦 ピアソンエデュケーション)の説明が分かりやすい。
- 最左の識別子(関数名や変数名など)に注目する。それ以外の識別子は引数の名前なので無視する。
- 下記の優先度に従い、その識別子から外側に向かいカッコをつける。左側の*よりも先に、右側の()や[]にカッコをつけるのがポイント。
- 日本語なら外側から、英語なら内側から読む。
優先度(上ほど強く結合)
記号 説明 () 宣言のグループ化 [], () 配列、関数引数 * ポインタ その他 intなど 例: signalの型
void (*signal (int sig, void (*handler)(int)))(int);
- 最左の識別子はsignal。(sigとhandlerは引数)。
- signalからカッコをつける。
- *より()の方が強いので、signal (int sig, void (*handler)(int)) をカッコで囲む。
- 一番左のvoidより一番右の (int) の方が強いので、一番左の void 以外をカッコで囲む。
- 結果はこうなる。
void ((*(signal (int sig, void (*handler)(int))))(int));- 外側からカッコを外しながら読む。
- void ⚫; ⚫はvoid
- void (⚫)(int); ⚫はvoidを返す関数(引数はint)
- void (* ⚫)(int); ⚫はvoidを返す関数(引数はint)へのポインタ
- void (*signal(⚫))(int); signalはvoidを返す関数(引数はint)へのポインタを返す関数(引数は⚫)
- void (*signal(int sig, void (*handler)(int)))(int); signalはvoidを返す関数(引数はint)へのポインタを返す関数(引数はintとvoidを返す関数(引数はint))
innodb_log_file_sizeの変更
innodb_log_file_size を変更する場合は、ログファイルをいったん削除して再作成する必要がある。
具体的には以下のような手順になる。
my.cnfを編集
/etc/my.cnf
[mysqld] innodb_buffer_pool_size=512M innodb_log_file_size=128M
シャットダウンと同時にテーブルスペースへデータを反映させるよう設定
$ mysql -u root -p mysql> SET GLOBAL innodb_fast_shutdown=0;
mysqldを停止
# /etc/init.d/mysqld stop
ログをリネーム
# cd /var/lib/mysql/ # mv ib_logfile0 ib_logfile0.bak # mv ib_logfile1 ib_logfile1.bak
mysqldを開始
# /etc/init.d/mysqld start
MySQLの「innodb_buffer_pool_size」と「innodb_log_file_size」の設定 - FlatLabs
CentOS 5.7 に PHP 5.3 の mcrypt 拡張とpearをインストール
yumのphp53でPHP5.3がインストールできる。拡張もyumにphp53-XXXXがあるが、php53-pearとphp53-mcryptはない。
mcryptのインストール
CentOS5.7のyumでphp53がインストールされた環境に、PHPのソースからmcrypt拡張をインストールした。
まず必要なmcrypt拡張のビルドに必要なパッケージをインストールしておく。
$ sudo yum install php53-devel libmcrypt-devel
yumでインストールしたphpと同じバージョンのソースを http://jp2.php.net/releases/ などPHPのダウンロードサイトからダウンロード、展開してmcrypt拡張をビルド、インストール。
$ wget http://museum.php.net/php5/php-5.3.3.tar.gz $ tar xzvf php-5.3.3.tar.gz $ cd php-5.3.3/ext/mcrypt/ $ phpize $ aclocal $ ./configure $ make $ sudo make install
php.iniを編集
extension=mcrypt.so
CentOS 5.6 に PHP 5.3 の mcrypt 拡張をインストールする (phpMyAdmin) | MyNotebook
pearのインストールとアップグレード
pearは以下の手順でインストール、アップグレード。
$ sudo yum install php-pear $ sudo pear upgrade --force Archive_Tar $ sudo pear upgrade --force Console_Getopt $ sudo pear upgrade PEAR
無視ファイル以外をまとめて svn add、紛失ファイルをまとめてsvn del
作業コピーにあるすべてのバージョン化されていないオブジェクトを再帰的に追加するには、
$ svn add * --force
とやる。
svn add * だと、既にバージョン管理下にあるディレクトリのまだバージョン管理下にないファイルが追加されないから、--force を付けているのだが、この場合、実行したディレクトリ直下のsvn:ignore属性に設定した無視ファイルや無視ディレクトリも追加されてしまう。
また、既にバージョン管理下にあるファイルも追加しようとするので、警告が出て汚い。
結局、svnだけではいい方法はない。
無視ファイルや無視ディレクトリを除いて、Subversionのバージョン管理下にないファイルをまとめてaddしたり、バージョン管理下にあるのになくなった(物理的に削除された)ファイルをまとめてdelするには、svn status の出力をgrepでフィルタしてsedで置き換える以下のようなaliasを設定するとよい。
~/.bashrc
alias svndel="svn st | grep '^!' | sed -e 's/\![ ]*/svn del /g' | sh" alias svnadd="svn st | grep '^?' | sed -e 's/\?[ ]*/svn add /g' | sh"
これは便利。
svn に登録されていないファイルをまとめて svn add:Goodpic
svn addがめんどくさいので | firegoby
Can't install RMagick 2.13.1. Can't find MagickWand.h.
ImageMagick 6.7.3-7をソースからインストールした環境に、gemでRMagickをインストールしようとしたら、以下のエラーが発生した。
$ sudo gem install rmagick Building native extensions. This could take a while... ERROR: Error installing rmagick: ERROR: Failed to build gem native extension. /opt/ruby-enterprise-1.8.7-2011.03/bin/ruby extconf.rb checking for Ruby version >= 1.8.5... yes checking for gcc... yes checking for Magick-config... yes checking for ImageMagick version >= 6.4.9... yes checking for HDRI disabled version of ImageMagick... yes Package MagickCore was not found in the pkg-config search path. Perhaps you should add the directory containing `MagickCore.pc' to the PKG_CONFIG_PATH environment variable No package 'MagickCore' found Package MagickCore was not found in the pkg-config search path. Perhaps you should add the directory containing `MagickCore.pc' to the PKG_CONFIG_PATH environment variable No package 'MagickCore' found Package MagickCore was not found in the pkg-config search path. Perhaps you should add the directory containing `MagickCore.pc' to the PKG_CONFIG_PATH environment variable No package 'MagickCore' found Package MagickCore was not found in the pkg-config search path. Perhaps you should add the directory containing `MagickCore.pc' to the PKG_CONFIG_PATH environment variable No package 'MagickCore' found checking for stdint.h... yes checking for sys/types.h... yes checking for wand/MagickWand.h... no Can't install RMagick 2.13.1. Can't find MagickWand.h. *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/opt/ruby-enterprise-1.8.7-2011.03/bin/ruby Gem files will remain installed in /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/rmagick-2.13.1 for inspection. Results logged to /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/rmagick-2.13.1/ext/RMagick/gem_make.out
ImageMagickは6.7.3-7をソースからインストールしている。
ImageMagick 6.6.9-10の場合は、Rmagickをインストールできた。
対処方法
エラーメッセージに、
Perhaps you should add the directory containing `MagickCore.pc' to the PKG_CONFIG_PATH environment variable
とあるので、MagickCore.pcが含まれているディレクトリを探して、PKG_CONFIG_PATHにセットするとインストールできた。
$ find /usr/local -name MagickCore.pc /usr/local/lib/pkgconfig/MagickCore.pc $ sudo PKG_CONFIG_PATH=/usr/local/lib/pkgconfig gem install rmagick Building native extensions. This could take a while... Successfully installed rmagick-2.13.1 1 gem installed Installing ri documentation for rmagick-2.13.1... Installing RDoc documentation for rmagick-2.13.1...