いますぐ実践! Linuxシステム管理

いますぐ実践! Linux システム管理 / Vol.231 / 読者数:2235名

こんばんは、うすだです。

最近、いろんなところで、まずゴールを決め、 ゴールにたどり着くためにどうすればいいかを逆にたどっていく、 的な記述を目にします。

いわゆる成功本によく書かれていることだと思いますし、 実際そうするのが目標に近づく最もよい方法なのだと思います。

また、ソフトウェアの世界にも、セーフティケースなどといった考え方があります。 これは、まず安全だよというゴールがあり、それを示すために様々なリスクを考え、 それぞれこうすれば安全だという論拠を決めていきます。

そんなわけで、まずゴールを決めることが重要だということを、 若いひとやわが息子に説いてみたりしました。

ですが、よくよく考えますと、当の本人であるわたしが実践していないんですよね。 つい最近、それに気づいてしまいました。

儲かるんです、と熱心に勧誘する先物取引の営業マンのようです。 説得力が皆無です。(じゃあお前が買えばいいじゃん、というやつですね。)

それではあまりにひどすぎますので、摩擦係数の小さい簡単なところから実際に始めて、 まずは簡単な実績を作るべし、と思っております。

ま、そのうち力説しだしたら、ああなんかやったんだと思ってください。
もしそういうことを言わなくなったら、ああやらなかったんだなあと…。

後者だよね…と思われないよう、今回もはりきってまいりますよ!

今回のお題 - ディスク の様々な情報を参照する

サーバでサービスを提供し続けるためには、各リソースに対して、 正常に動作しているかどうか、リソースが十分足りているかどうかなど、 管理を行う必要があります。

そんなリソースの中で、最も重要なモノのひとつとして挙げられるのが、 ディスクではないでしょうか。

なにがあろうとも、大事なデータは永続的に保存する必要があります。
そして、そのためには、ディスクの容量が十分あって、許容できる速度で読み書きでき、 ハード障害などなくフル回転しているかなど、日々確認をしなければなりません。

というわけで今回は、ディスクのいろいろな情報を、 いろんな面から参照してみたいと思います。

今回は(今回も?)、わりと基本的なことを取り上げていますので、 玄人な方はさらっとスルーしていただいて構いません。

ファイルシステムの情報を参照する

まず、とっかかりとしましては、 マウント中のファイルシステムの状態を知るための「df」コマンドでしょうか。
差し当たっては、オプションなしでそのまんま実行してみましょう。

  $ df
  Filesystem    1K-blocks       Used Available Use% Mounted on
  /dev/sda6    405640808K 336583176K 48452192K  88% /
  udev           4069552K         4K  4069548K   1% /dev
  tmpfs          1631896K      1952K  1629944K   1% /run
  none              5120K         0K     5120K   0% /run/lock
  none           4079736K       936K  4078800K   1% /run/shm
  /dev/sda5       467367K    349722K    92711K  80% /boot
  cgroups        4079736K         0K  4079736K   0% /sys/fs/cgroup

マウント元、サイズ、使用量、空き容量、使用率およびマウント先が列挙されます。
このうち、/dev で始まるヤツが、 ハードディスクなど本物のデバイスを元にしています。他は、 仮想的なファイルシステムだったりメモリを使用したファイルシステムだったりします。 たとえば上記の場合、/dev/sda5 と /dev/sda6 がハードディスクです。

桁が多すぎてサイズがわかんない、という場合は、 「-h」オプションつきで実行してください。 人間様が確認するのによい感じで出力されます。

  $ df -h
  Filesystem      Size  Used Avail Use% Mounted on
  /dev/sda6       387G  321G   47G  88% /
  udev            3.9G  4.0K  3.9G   1% /dev
  tmpfs           1.6G  2.0M  1.6G   1% /run
  none            5.0M     0  5.0M   0% /run/lock
  none            3.9G  936K  3.9G   1% /run/shm
  /dev/sda5       457M  342M   91M  80% /boot
  cgroups         3.9G     0  3.9G   0% /sys/fs/cgroup

「-a」オプションをつけて実行すると、 サイズが 0 のファイルシステムも出力してくれます。

  $ df -ah
  Filesystem      Size  Used Avail Use% Mounted on
  /dev/sda6       387G  321G   47G  88% /
  proc               0     0     0    - /proc
  sysfs              0     0     0    - /sys
  none               0     0     0    - /sys/fs/fuse/connections
  none               0     0     0    - /sys/kernel/debug
  none               0     0     0    - /sys/kernel/security
  ...後略...

「-T」オプションをつけて実行すると、各ファイルシステムの種類も出力してくれます。

  $ df -aTh
  Filesystem  Type       Size  Used Avail Use% Mounted on
  /dev/sda6   ext4       387G  321G   47G  88% /
  proc        proc          0     0     0    - /proc
  sysfs       sysfs         0     0     0    - /sys
  none        fusectl       0     0     0    - /sys/fs/fuse/connections
  none        debugfs       0     0     0    - /sys/kernel/debug
  none        securityfs    0     0     0    - /sys/kernel/security
  ...後略...

ちなみに、「mount」コマンドをそのまま実行すると、 ファイルシステムの種類やマウントオプションなどを確認できます。
(/proc/mounts の内容とほぼ同じだったりします。)

  $ mount
  /dev/sda6 on / type ext4 (rw,errors=remount-ro,user_xattr)
  proc on /proc type proc (rw,noexec,nosuid,nodev)
  sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
  none on /sys/fs/fuse/connections type fusectl (rw)
  none on /sys/kernel/debug type debugfs (rw)
  none on /sys/kernel/security type securityfs (rw)
  ...後略...

さて、ハードディスクなどのデバイスに対しては、 ファイルを介して読み書きを行います。
上記の場合、「/dev/sda」までが物理的なディスクを指し、 直後の「5」や「6」という数字がパーティションを指します。

じゃあ、このディスクは 5 と 6 の2つに分けているのかというと、 そういうわけではありません。(そういう場合もありますが…。)

じゃあどうなんだよ、ということでディスクのパーティション情報を確認するには、 「fdisk」コマンドを使用します。ディスクを引数に指定して実行しますが、 うっかりパーティションテーブルを変更してしまう恐れがありますので、 情報を出力するだけの「-l」オプションをつけて実行することにしましょう。
(管理者権限が必要ですので、「sudo」コマンドを介して実行します。)

  $ sudo /sbin/fdisk -l /dev/sda
  [sudo] password for usu: (自分のパスワードを入力)
  ...中略...

     Device Boot     Start        End     Blocks  Id  System
  /dev/sda1   *       2048    3071999    1534976   7  HPFS/NTFS/exFAT
  /dev/sda2        3072000  125964719   61446360   7  HPFS/NTFS/exFAT
  /dev/sda3      956291072  976771071   10240000   7  HPFS/NTFS/exFAT
  /dev/sda4      125966334  956291071  415162369   5  Extended
  /dev/sda5      125966336  126963711     498688  83  Linux
  /dev/sda6      126965760  951183359  412108800  83  Linux
  /dev/sda7      951185408  956291071    2552832  82  Linux swap / Solaris

上記の場合、全部で7つ(sda4 は sda5〜7 をとりまとめているだけ) あることがわかります。
このうち Linux で使っているのは sda5〜7 の3つです。 sda5 と sda6 は前述の通りですが、sda7 は「スワップ」と呼ばれる領域です。

スワップは、実メモリが足りなくなったとき、 あまり使われていない部分を一時的に退避して、 実メモリより多くメモリが使えるようにする(ように見せる)ための領域です。 ですので、ファイルシステムとして中を参照できるわけではありません。

実メモリとスワップの使用状況を確認するには、「free」コマンドを使用します。 そのまま実行すると、現在の状況を教えてくれます。

  $ free
             total      used      free  shared   buffers    cached
  Mem:     8159472   3737356   4422116       0    321172   2238292
  -/+ buffers/cache: 1177892   6981580
  Swap:    2552828         0   2552828

「Swap:」のところの「used」が「0」ですので、 いまのところは全然使用されていないことがわかります。
(スワップが使われるようになると、当然速度が低下しますので、 これは喜ばしいことです。)

ちなみに、出力はキロバイト単位ですが、もう少し大雑把な単位がよいと思った貴兄は、 「-m」オプションをつけてメガバイトにしてください。

あるいは、「-s」オプションをつけて「swapon」コマンドを実行すると、 純粋にスワップの状態だけを確認できます。

  $ swapon -s
  Filename               Type         Size      Used    Priority
  /dev/sda7              partition    2552828   0       -1

物理的な装置の情報を参照する

ディスクをどう分割して、それぞれどう使っているのかがわかったところで、 今度はディスクそのものの情報を確認してみましょう。

IDEやSATAで接続されたディスクの情報を得るには、「hdparm」コマンドを使用します。 「-i」オプションとディスク(/dev/sda などです)を引数に指定して実行すると、 ディスクの情報を出力してくれます。
(これも、管理者権限が必要ですので、sudoコマンド経由で実行します。)

  $ sudo /sbin/hdparm -i /dev/sda
  [sudo] password for usu: (自分のパスワードを入力)

  /dev/sda:

   Model=WDC WD5000BEVT-22A0RT0, FwRev=01.01A01, SerialNo=WD-WX81A9052240
   Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
   RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=50
   BuffType=unknown, BuffSize=8192kB, MaxMultSect=16, MultSect=16
   CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=976773168
  ...後略...

hdparmには様々なオプションがあり、細かい設定変更や操作が行えます。 …が、わたしも含めて素人さんが触るには敷居が高いですので、 きちんと理解したオプション以外は試さない方が無難ではないかと思います。

ただ、ディスクからの読み込み速度を計測する「-t」オプションは、 性能の目安になりますので、実行してみても問題はない…はずです。

  $ sudo /sbin/hdparm -t /dev/sda
  [sudo] password for usu: (自分のパスワードを入力)

  /dev/sda:
   Timing buffered disk reads: 234 MB in  3.02 seconds =  77.47 MB/sec

hdparmと同様のコマンドに「smartctl」があります。
「S.M.A.R.T.(スマート)」という機能を利用して、ディスクの情報や状態を参照したり、 設定を変更したりするためのコマンドです。

ちなみに、S.M.A.R.T. については、下記などをご覧ください。

Self-Monitoring, Analysis and Reporting Technology - Wikipedia
http://ja.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technology

差し当たっては、hdparm と同様、 「-i」オプションとディスクを引数に指定して実行してみましょう。

  $ sudo /usr/sbin/smartctl -i /dev/sda
  [sudo] password for usu: (自分のパスワードを入力)
  ...中略...

  === START OF INFORMATION SECTION ===
  Model Family:     Western Digital Scorpio Blue Serial ATA
  Device Model:     WDC WD5000BEVT-22A0RT0
  Serial Number:    WD-WX81A9052240
  LU WWN Device Id: 5 0014ee 655cfeb7c
  Firmware Version: 01.01A01
  User Capacity:    500,107,862,016 bytes [500 GB]
  Sector Size:      512 bytes logical/physical
  Device is:        In smartctl database [for details use: -P show]
  ATA Version is:   8
  ATA Standard is:  Exact ATA specification draft version not indicated
  Local Time is:    Sun Nov  4 21:24:05 2012 JST
  SMART support is: Available - device has SMART capability.
  SMART support is: Enabled

「-a」オプションや「-x」オプションを使用すると、 さらに詳細の情報や状態を教えてくれます。(…が、ここでは割愛します。)

また、「-t」オプションを使用すると、セルフテストを実行します。
-tの後に「short」を指定して実行すると、テストを開始します。

  $ sudo /usr/sbin/smartctl -t short /dev/sda
  [sudo] password for usu: (自分のパスワードを入力)
  ...中略...

  === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
  Sending command: "Execute SMART Short self-test routine immediately \
  in off-line mode".
  Drive command "Execute SMART Short self-test routine immediately \
  in off-line mode" successful.
  Testing has begun.
  Please wait 2 minutes for test to complete.
  Test will complete after Sun Nov  4 21:40:56 2012

  Use smartctl -X to abort test.

2分くらい待ってねとか、 中断するには「-X」オプションを指定して実行してねとかおっしゃいます。

終わったかな、という頃に、「-l」オプションと「selftest」を指定して実行すると、 結果が分かります。

  $ sudo /usr/sbin/smartctl -l selftest /dev/sda
  [sudo] password for usu: (自分のパスワードを入力)
  ...中略...

  === START OF READ SMART DATA SECTION ===
  SMART Self-test log structure revision number 1
  Num  Test_Description  Status                  Remaining  LifeTime(hours)  LBA_of_first_error
  # 1  Short offline     Completed without error       00%      7257         -

「without error」なので、問題なさそうです。ほっとしますね。
ちなみに、「-t long」とすると、長ーくテストします。

  $ sudo /usr/sbin/smartctl -t long /dev/sda
  [sudo] password for usu: (自分のパスワードを入力)
  ...中略...
  Please wait 158 minutes for test to complete.
  Test will complete after Mon Nov  5 00:26:01 2012

  Use smartctl -X to abort test.

158分もかかりますか…。

…待ってみました。下記のように、こちらもエラーはありませんでした。

  $ sudo /usr/sbin/smartctl -l selftest /dev/sda
  ...中略...
  Num  Test_Description  Status                  Remaining  LifeTime(hours)  LBA_of_first_error
  # 1  Extended offline  Completed without error       00%      7260         -
  # 2  Short offline     Completed without error       00%      7257         -

ディスクに対する読み書きの統計情報を知るには、 「iostat」コマンドを使用します。
オプションなしでそのまま実行すると、CPUとデバイスの状況を出力してくれます。

  $ iostat
  Linux 3.2.0-32-generic (server)  2012年11月04日  _i686_  (2 CPU)

  avg-cpu:  %user   %nice %system %iowait  %steal   %idle
             4.28    0.26    1.92    0.61    0.00   92.93

  Device:    tps   kB_read/s   kB_wrtn/s    kB_read    kB_wrtn
  sda       3.53       12.62       46.92    2248009    8358298

「tps」は「transfer per second」の略で、 1秒間に読み書きしたデータの回数を表します。次の2つが、 1秒間に読み書きしたキロバイト数、その後の2つが、1秒間に読み書きしたデータ量です。

「-d」オプションをつけて実行すると、デバイスの状況だけ出力します。
(ちなみに、「-c」オプションだと、CPUだけになります。)

  $ iostat -d
  Linux 3.2.0-32-generic (server)  2012年11月04日  _i686_  (2 CPU)

  Device:    tps   kB_read/s   kB_wrtn/s    kB_read    kB_wrtn
  sda       3.53       12.62       46.92    2248017    8358542

-dオプションの後に数値を指定すると、指定した秒ごとに延々と出力してくださいます。

  $ iostat -d 2
  Linux 3.2.0-32-generic (server)  2012年11月04日  _i686_  (2 CPU)

  Device:    tps   kB_read/s   kB_wrtn/s    kB_read    kB_wrtn
  sda       3.52       12.55       47.76    2251708    8566411

  Device:    tps   kB_read/s   kB_wrtn/s    kB_read    kB_wrtn
  sda       3.50        0.00       24.00          0         48

  ...後略...

ちなみに、さらに数値を指定すると、その回数に達したとき終了します。

おわりに

以上、ディスクに関する情報の取得や、諸々を確認するためのコマンドの使い方を、 だらだらっとご説明しました。

ご紹介したコマンドには、他にも有用なオプションがあります。
また、他のコマンドで有用なものや、GUIでビジュアルにわかるツールもあります。 そのあたりは、各自調べて、よいものを探り当ててください。

宿題の答え

前回の宿題は、

  FUSEでマウント中にネットワークを切断するなどして、
  その後のエラー発生の確認やリカバリの方法を模索してみましょう。

でした。

sshfs、archivemount および sshfs+archivemount で試しました。
興味のある貴兄は、下記をご覧ください。


まずは、sshfs で試してみました。
手元のマシンで、sshfs コマンドを使ってマウントします。

  client$ sshfs usu@server:/home/usu/tmp mnt
  client$ df mnt
  Filesystem             1K-blocks  Used   Available Use% Mounted on
  server:/home/usu/tmp 1048576000K    0K 1048576000K   0% /home/usu/mnt

そして、サーバ上の該当する sshd を kill してしまいます。

  server$ ps -C sshd -o user,pid,time,cmd
  USER       PID     TIME CMD
  root     23804 00:00:00 sshd: usu [priv] 
  usu      23806 00:00:00 sshd: usu@pts/0  
  root     32680 00:00:01 /usr/sbin/sshd
  server$ kill 23806

すると、あっさり、アンマウントされていました。

  client$ df mnt
  Filesystem      1K-blocks       Used Available Use% Mounted on
  /dev/sda6      405640808K 336561452K 48473916K  88% /

これは、sshd を kill することで、TCPのセッションが切断され、 それを sshfs が検知してアンマウントしているからではないかと思われます。

では、(途中のどこかの)ネットワークを切断するとどうなるでしょうか。
ネットワークを切断した場合は、IPのレベルでつながらないため、 TCPのセッションが終了せず、他の遠隔なファイルシステムと同様、 制御不能な状態に陥ります。(Ctrl-c や Ctrl-z も効きません。)

  client$ ls mnt
  (応答が返ってこないですよ…)

どうやら、mount.fuse や sshfs のオプションには、 途中で諦めるというモノがなさそうです。 (あ、もしご存じでしたら、ぜひご教示ください。)


次に、archivemount で試してみました。
まず、archivemount コマンドでマウントします。

  $ archivemount foo.tgz mnt
  $ df mnt
  Filesystem      1K-blocks   Used   Available Use% Mounted on
  archivemount  1048576000K     0K 1048576000K   0% /home/usu/mnt

もとのアーカイブ(ここでは foo.tgz)を mv してしまいましょう。

  $ mv foo.tgz some/where/else/
  $ ls mnt/foo/bar
  baz   qux   quux

…特に問題なくアクセスできます。
これはおそらく、アーカイブファイルの参照をiノードで行っているためです。 mv してもiノードは変わらないため、 引き続きお楽しみいただけるということのようです。

じゃあ、rm で消してしまった場合どうなるのかといいますと、お察しの通り、 こちらも問題ありません。
rm で消しますと、ファイルシステムからは参照できなくなりますが、 他に参照しているプロセス(archivemount のことです)があれば、 データはまだ残っていて、消し去られる心配は不要です。


じゃあじゃあ、アーカイブファイルがリモートマシンに存在して、 それを参照できなくした場合は、どうなるのでしょうか。
…説明からして回りくどいですが、試してみました。

  $ sshfs usu@server:/home/usu/tmp mnt
  $ archivemount mnt/foo.tgz mnt2
  $ df
  ...中略...
  server:/home/usu/tmp 1048576000K  0K 1048576000K  0% /home/usu/mnt
  archivemount         1048576000K  0K 1048576000K  0% /home/usu/mnt2

いま、sshfs の方をアンマウントしようとすると、archivemount が使用中のため、 叱られてしまいます。

  $ fusermount -u mnt
  fusermount: failed to unmount /home/usu/mnt: Device or resource busy

ですが、ここで sshd を kill すると、sshfs がやむを得ずアンマウントします。

  $ df
  ...中略...
  archivemount         1048576000K  0K 1048576000K  0% /home/usu/mnt2

この状態で参照すると、キャッシュされた箇所は依然としてアクセスできますが、 そうでないところはエラーになります。

  $ cat mnt2/foo.txt
  cat: mnt2/foo.txt: Operation not permitted

幸い、アンマウントはできるようです。

  $ fusermount -u mnt2

 

…というわけで、無限の組み合わせができてしまいそうですので、 この位でやめておきます。
これは! と思ったパターンを、ぜひ、実際に試してみてくださいませ。

今回の宿題

今回の宿題は、

  ディスクの状況を確認してメールするようにしてみましょう。

です。

困ったときの、メールで通知です。
内容はお任せしますが、こんな情報や状態をチェックする必要がある、 と思ったものを盛り込んでおくと、実際にも役立つように思います。

あとがき

おうちの Windows Vista を Windows 8 にアップグレードしました。
下記のように、いまなら 3,300円 でできる! というのに釣られました。

お得にアップグレードしましょう / Windows を購入する
http://windows.microsoft.com/ja-JP/windows/buy

アップグレード後、各種アプリをインストールしたり (インストール前に互換性チェックをしましたが、 その結果に関係なくアップグレード後は空になっていた気がするのですが、 気のせいかもしれません)、 プリンタが使えなかったり(Windows 7用のドライバで動作しました)、 キーボードがなぜか英語(レジストリを直接書き換えました) といった問題はあったものの、概ね(?)問題なくアップグレードできました。

で、みなさまもご存じの通り、操作方法ががらりと変わりました。
…とはいっても、従来と同等のデスクトップな画面は依然としてありますし、 Alt+Tab などの基本的なショートカットは未だ健在です。

まあ、わたしは、そういう変化にはあまり抵抗がないため、 わりと楽しみながら操作方法を模索して使っていました。
(深く使いこなせていないだけだったりするわけですが。)

変化を嫌いがちな息子は、最初はぶーぶー文句を言っていましたが、 そのうち何も言わずに使い続けていました。
(こちらは、悔しいですが、おそらく、若さ…ですね。)

Ubuntu がデスクトップインタフェースを Unity にしたとき、なんじゃぁこれわぁー! と思いましたが、Windows もタブレット的なインタフェースになって、 当面はそういう方向で進んでいくのかなあと思いました。

右クリックするとメニューが多量にずらっと出現、というインタフェースも、 そのうちなくなるかもしれませんね。

というのも、今関わっているアプリでは、機能を1つ追加するたびに、 右クリックしたときのメニューの項目を増やしているため、 使いやすさから遠のいているよなあ…と常に感じているからなのでした。

もっと直感的に操作する方法を考えたり、 不要なメニューや機能を外してしまったりということも、 バランスを考慮しつつ考えたいな…と、いつか暇になったら…と、 遠い目をしながら夢見ている次第です…。

 

今回も、ここまで読んでいただき、たいへんありがとうございました。
次回は、11月18日(日) の未明にお会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」- 栗の季節は終わっても、栗菓子と栗日記は続きます。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://usupi.org/k/ (モバイル栗日記)
http://twitter.com/kuriking/ (栗つぶやき)
http://facebook.com/kuriking3 (栗顔本)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本