2012/12/12

古いハードディスクの不調とゼロフィル

ハードディスクが壊れた様子だったので Ubuntu 12.04 の LiveUSB を作りパソコンを起動して、そこからスマート情報を確認すると、次のようになっていました。



このディスクの場合は、15項目ありました。

SMART情報の読み方はよく分からないのですが、正規化値(比較用に加工した値のようです)を見ると良くない(と思われる)ものが4点ありました。
  1. 001:Read Error Rate:57
  2. 007:Seek Error Rate:76
  3. 009:Power-On Hours:70(3.0年)
  4. 195:Hardware ECC Recovered:57
また、「197:Current Pending Sector Count」の値(生値:加工前のデータ)は「39」セクタとなっていて、全体が「赤字」で強調されていました。評価は「警告」となっていますので、「この値が問題なんだろな」ということが私にもわかります。

そして、あまり目立たないんですが、「198:Uncorrectable Sector Count」の値も「39」セクタとなっています。説明には「セクタの読み書きの際に発生した回復不可能なエラーの総数。この値が上昇した場合、ディスクの表面や機械的な部分、もしくはその両方に不具合が発生していることを表しています。」とあります。

「回復不可能なエラー」とあったんですが、次の方法で回復出来ました。

$ sudo dd if=/dev/zero of=/dev/sda bs=4096

「回復不可能なエラー」の主語は、「ハードディスクのコントローラーが」ということのようです。ddコマンドを使ったディスク全体(と言ってもユーザに解放された領域に限るわけですが・・・)をゼロで埋める作業(ゼロフィルというらしいです)で回復したので「不可能」とは限定的な意味だったようです。


「198:Uncorrectable Sector Count」、「197:Current Pending Sector Count」、それぞれの値は「0」となりました。「005:Reallocated Sector Count」の値は「0」のままなので、代替処理されずに回復することができたようです。

セルフテストも失敗することはなくなりました。

この後、OSのインストールを行い、数日経過しましたが、不都合なく使えています。

振り返ると、今回の不具合はディスク表面の問題だったようです。割と古いディスク(7年もの)なので、経年劣化で Seek Error や Read Error の評価が低めなんだと思います。ただ、このディスクのSMART情報を確認したのは今回が初めてだったので、初期状態も経過も不明です。

今回のケースでは、SMART情報が役立ちました。私は有益な情報だと思いましたけど、普段から確認する習慣があれば状況を把握しやすかったのではないか、という反省もあります。

無駄に終わった作業:

パソコンが起動しないと結構あわててしまうようです。

LiveCD で起動できることを確認できたので、ハードディスクに問題があることはすぐに分かったのですが、いきなりOSの再インストールをはじめてしまいました。

古いパソコンなので、インストール中にエラーメッセージが表示されたことから CD-ROM Drive にも不具合があるかもしれないと思い、別のパソコンで LiveUSB を作ってインストールを何度か繰り返しもしました。

fsckコマンドで、「ファイルシステムの検査と修復」も試しましたけど、不良セクタの数字が変わるだけで状況は変わりませんでした。

そして、ゼロフィルで復旧出来たわけですが、ここでも試行錯誤がありました。

最初に、

$ sudo dd if=/dev/zero of=/dev/sda

としてddコマンドを実行したのですが、「書き込めません」とメッセージがでて途中で停止します。

何度が繰り返しましたが、初回を除き毎回同じセクタ位置で停止します。

ところが、

$ sudo dd if=/dev/zero of=/dev/sda bs=4096

とオプションでブロックサイズを変更したところ、1度でパスしました。

最初のddコマンドで不良セクタが1つ回復した感触があったので、いろいろと試す気持ちになったのですが、512バイトを4Kバイトに変えただけですんなりとパスできたことが不思議でしかたありません。

この後、ブロックサイズを512バイトに戻してゼロフィルを試してみると、今度はパスしました。すっかり不良セクタは回復しているようでした。

オプションの変更が効果的だったのか、たまたまなのか、私にはわからないですが、このディスクの不調には「ゼロフィルが効果的」だったことはわかりました。

SMART情報を正しく読み取れれば、余計なことをせずに復旧できたのではないかと思います。

2012/11/22

コンパクトなラテンフォント:Courier 10 Pitch

Unicode に登録されているラテン文字のグリフ一覧をまとめた時に「字形の多さに驚いた」のですが、常に全部の字形が必要ということはないと思います。

漢字の字形はラテン文字と比較すると桁違いに多いですが、日本で常用する漢字は全体の一割にも満たないはずです。同様にラテン文字でも常用されるものは限られるのではないか、と疑問を持ちました。

Courier 10 Pitch というラテンフォントが Ubuntu 10.04 に搭載されていました。

登録されているグリフは次の通りです。

記号類を含めても227グリフしかありませんけど、一定水準の需要は満たしているようです。

wikipedia の「ISO 8859-1」の解説(カバー範囲)には、
  • オランダ語(IJ, ijが足りないがこれらは電子形式では常にIJやijとして表現されるべきである)
  • フランス語(Œ, œおよびきわめてまれなŸが足りない; これらは一般に通常は必要なリガチャなしで'OE'や'oeに置き換えられ、トレマなしで'Y'に置き換えられる)
  • フィンランド語(外来語で使われるŠ, š, Ž, žが足りない)
という指摘がありました。

「基本ラテン文字」と「ラテン1補助」の範囲には使用頻度の高いグリフが(8bitの制限の中で)集約されているけれど、少し足りないものがある、という指摘のようです。

その「足りない部分」を補っているので「実用的なラテン文字フォント」として利用されているんでしょう。ただし、ギリシャ文字やキリル文字をセットにしたフォントに比べると不十分なので、用途は制限されるようです。

Ubuntu 10.04 搭載フォントとしては、一般的なフォントとは異なるフォルダに登録されていました。

パソコンなどのリソースを浪費したくない場面で役立つよう、敢えて256グリフ以下にしてシステム専用フォルダに登録していると思いましたけど、どうなんでしょう。

2012/10/31

Ubuntu 10.04 ラテン文字フォントのグリフ一覧

ラテン語(イタリア発祥)は死語に近い状態なのに、ラテン文字はドイツ語やフランス語、英語など多数の言語を記述するために広く利用されているようです。元は対の言語と文字だったと思いますが、この違いはなんなんでしょう。文字は言語の媒体に過ぎないということの証明でしょうか。

さて、ユニコードに収録されているラテン文字のグリフ一覧です。Ubuntu 10.04 搭載フォントにあるグリフだけ表示できるという制限がありますが、字形を確認するために作りました。表示されたグリフは搭載フォントからの寄せ集めですが、表示順序はユニコードラージフォントの DeJave Sans が最優先なので、大部分はその収録グリフだろうと思われます。(表示順序は FontConfig システムで指定されています)

↓「NUL(U+0000)」から始まる制御文字にグリフはありませんが、略語のグリフ(U+2400から)が Arial Unicode フォント(Ubuntu 非搭載)に収録されていたので参考のため位置を変えて表示しました。小さくて見づらいですが、横幅を保てる点で便利です。(U+0080以降の略語グリフは見当たりませんでした。)

グリフの範囲(七つ)は、使用頻度の高い順に並んでいるようです。
範囲 使用頻度 バージョン Note
基本ラテン文字 必須(機器の制御・OSの設定など) Unicode 1.0 ASCII互換(7bit長)
ラテン1補助 非常に高い Unicode 1.0 制御文字含む
ラテン文字拡張A 高い(大抵の欧文を記述できる) Unicode 1.0 - 1.1
ラテン文字拡張B ↓低い Unicode 1.0 - 3.0 カナの「ヱ」レベル?
ラテン文字拡張追加 Unicode 1.1 - 5.1
ラテン文字拡張C Unicode 5.0 - 5.1
ラテン文字拡張D Unicode 5.1 - 6.1 未使用領域あり
ASCII互換の「基本ラテン文字」と「ラテン1補助」の範囲は、「制御文字(字形なし)」「記号」などを含んでいます。制御文字はコンピュータなどの操作に欠かせないですし、アラビア数字も世界中で使われていると思います。記号も然り。よって、ラテン文字以外のフォントでも収録される機会が多いのだと思いました。

「ラテン文字拡張B(〜U+024F)」までのグリフは連続で収録されていますけど、これは同時期にユニコードに割り当てられたためのようです。携帯電話の「人口カバー率」のような考え方では、「ラテン文字拡張A(〜U+017F)」までで大抵の需要は満たせるようでしたので、「ラテン文字拡張B」以降はあまり使われることのないグリフとみてよさそうでした。これを100%にするために、時間を掛けて更に拡張しているようです。(ユ:「収集家として当たり前のことをやっているだけです」)

「ラテン文字拡張D」の範囲には「空白」が目立ちます。コード化されていないグリフは登録できないので時期的な理由が大きいですが、フォントに収録する段階でグリフの取捨選択は製作者の判断で「不要」と判断されたものも空白なんだと思います。それなりのフォントを追加すれば全部の字形を確認できるかもしれませんけど、私の場合はまったく必要ないのでこのままで問題なしです。

ユニコードは「世界規模の文字集合」です。古代文字や利用されていない文字、麻雀牌などの図形や特殊な記号までも収録していました。博物館的なので、字形の全てを確認してみたい気持ちを少し持ったんですが、Ubuntu のフォントを増やすほどに面倒になる部分のことを思い出したので「収集は止めとこう」と思います。

2012/09/30

Ubuntu 10.04 搭載フォントリスト

Ubuntu 10.04 に搭載されているフォントを整理したいのですが、私には要不要の区別ができません。それぞれのフォントの内容を知らないので当然なのですが、区別できるようリストにして整理したいと思います。

Fontconfig TM システム:

搭載フォントリストを得るために fc-list コマンドを実行することから始めました。このコマンドは Fontconfig システムの一部なんだそうです。Ubuntu 10.04 では /etc/fonts フォルダに設定ファイルが格納されていて、その中の fonts.conf に管理対象のフォント用フォルダが記述されています。

詳しく知るには英語の解説を読むことから始める必要がありますけど、後々の作業も面倒に思えました。個人的には「あまり係わりたくない管理システム」という印象です。

ユニコード:

ユニコードは最大で1,112,064文字を収録でき、そのコード長は21bitで、U+0000〜U+10FFFFまでのコードポイント範囲があるそうです。範囲は1,114,112文字分に相当しますが、サロゲートペアのための2,048文字分は使えないので冒頭の数字になるようです。

符号化(エンコード)方式は次のようなものがあるそうです。
  • UTF-7:(運用上の問題が多いので)非推奨
  • UTF-8:1〜4バイトの可変長コードを使う方式(Webでは一般的に使われている)
  • UTF-16:サロゲートペアを使った4バイトまたは2バイトのコードを使う方式
  • UTF-32:4バイトの固定長方式(ファイルサイズが大きくなるのであまり使われない)

このページも「UTF-8」を符号化方式として指定していますけど、日常的に使う文字は2バイトで表現できる「基本多言語面(BMP):U+0000〜U+FFFF」にそのほとんどが収録されているようなので、実際に格納されている文字データは1バイトか2バイトのいずれかになっているんだ、と思ったら違いました。

範囲 データ長 バイト数 文字数 Note
U+0000〜U+007F 7bit 1 128 ASCII互換部分
U+0080〜U+07FF 11bit 2 1919
U+0800〜U+FFFF 16bit 3 63487 CJK統合漢字含む(BMP境界まで)
U+10000〜U+1FFFFF 21bit 4 2031615 U+10FFFFまでが対象
U+200000〜U+3FFFFFF 26bit 5 - エンコードの対象外
U+4000000〜U+7FFFFFFF 31bit 6 - エンコードの対象外
という6階建てのエンコード体系になっているそうです。「UTF-8」を使ってエンコードするデータファイルでは、日本語は3バイト/文字を消費するようです。「EUC-JP」や「Shift_JIS」だと2バイト/文字で済むようですが、それと比べるとファイルサイズが(だいたい)5割増しというのはムダと感じることもありそうです。

「UTF-16」ならファイルサイズを節約できそうですけど、Webでは普及していないようです。なぜなんでしょう。

ASCII互換の基本ラテン文字:

範囲 開始ポイント 終了ポイント 文字数 Note
基本ラテン文字 U+0000 U+007F 128 Unicode 1.0 (1991年策定、ASCII互換)
ラテン1補助 U+0080 U+00FF 128 Unicode 1.0(↓2バイトデータ/UTF-8)
ラテン文字拡張A U+0100 U+017F 128 Unicode 1.0
ラテン文字拡張B U+0180 U+024F 208 Unicode 1.0
ラテン文字拡張追加 U+1E00 U+1EFF 256 Unicode 1.1(↓3バイトデータ/UTF-8)
ラテン文字拡張C U+2C60 U+2C7F 32 Unicode 5.0
ラテン文字拡張D U+A720 U+A7FF 224 Unicode 5.1(2008年策定)
合計 - - 1104 -
ユニコードは世界中の文字が収録される予定だそうです。最初に収録されているのはラテン文字ですが、複数の範囲に分かれています。随分後から追加された拡張部分もありますが、この辺りには未使用コードポイントが残っていました。それにしても、ラテン文字がこれほどあるとは想像以上です。

さて、「基本ラテン文字」ですけど、次のようなグリフ(字形)が登録されています。ラテン文字以外のフォントでも大抵はこの範囲を含んでいます。日本語キーボードからも直接入力できる利用頻度の高い文字です。

ASCII ( American standard code for information interchange ) は1963年にアメリカで制定されたコンピュータや通信機器のためのコードだそうです。当時のコンピュータの性能と関係ありそうですが、7ビット(128文字)で表現できるよう制限されていて、タイプライターで使っていたような文字や記号と機械を操作するための制御文字がセットになっています。

ユニコードにはたくさんの範囲がありました。通常、ひとつの範囲には「文字」か「記号」だけが収録されているようでしたけど、この範囲では、「数字」、句読点などの「記号」、機械のための「制御文字」が混在しています。同様に「ラテン1補助」でも制御文字などが混在してして、この二つの範囲はユニコード全体から見ると「特殊」ですけど、「合理的」な理由があるはずです。

「UTF-8」では可変長コードを扱いますが、ASCII互換の「基本ラテン文字」だけが1バイトデータとして扱われます。使用頻度の特に高い文字や記号の集まりだと思いますので、ファイルサイズをコンパクトにするのに(英語圏の人は特に)都合のよい配置なのは(漢字圏の私でも)当然なんだと理解できます。

大部分の文字や記号は3〜4バイトのデータとして扱われます。日本語の文字は3バイトです。「EUC-JP」などのローカルなエンコード方式が使われ続ける理由のひとつは、ファイルサイズの効率の良さだと思います。他の国でも同様で、表音文字なら1バイトで扱うことも容易だと思うんですが、これがUTF-8では3バイト必要になります。非効率が嫌われることは少なくないので、UTF-8方式がどれほど普及してもローカル方式が消えて無くなるとは思えませんでした。

ユニコードには「古代文字」や「記号」、「図形」など「現代文字以外」のグリフが収録される予定です。内容が充実するのは将来の話だろうと思うので今のところメリットは未知数ですけど、コンパクトなコードにはないこの利点に「将来性あり」と思いたいです。(携帯電話の絵文字は2010年に追加されたそうです)

周辺の事情が少し分かったところで、本題のリスト整理に移りたいと思います。

フォントリスト:

リストでは、「グリフ(字形)サンプル」及び「フォントファミリーのファイル数」、「登録グリフ数」、「登録文字種類」を比較できるようにしました。

  • グリフ数と収録文字種類は、(Ubuntuソフトウェアセンターにあった) FontForge で調べました。
  • 文字種類が多いので「アラビア文字」以降は「他」としか記載していないものもあります。
  • 各フォントのラテン文字の収録範囲は、「基本ラテンだけ」や「ラテン1補助まで」など様々でした。

【文字凡例:】「 ラ:ラテン」「Φ:ギリシャ」「キ:キリル」「ル:アルメニア」「へ:ヘブライ」「ア:アラビア」
分類 フォントファミリー名 スタイル・ウェイト グリフ数 文字 Note
コアフォント Andale Mono (01IOl) 661 ラΦキ Lucida Console
Arial 標伊 太伊  1378 ラΦキ へア 主要sans-serif
Arial Black 671 ラΦキ
Comic Sans MS 標   579 ラΦキ
Courier New 標伊  1378 ラΦキ へア 主要monospace
Georgia (0123456789) 標伊  590 ラΦキ
Impact 663 ラΦキ
Times New Roman 標伊  1378 ラΦキ へア 主要serif
Trebuchet MS 標伊  577 ラΦキ
Verdana 標伊  701 ラΦキ
Webdings 255 非文字
代替フォント Liberation Mono 標伊  666 ラΦキ Courier New
Liberation Sans 標伊  674 ラΦキ Arial
Liberation Serif 標伊 太 667 ラΦキ Times New Roman
GNU FreeFont FreeMono 標 斜太 斜 3331 ラΦキルへア他
FreeSans 標 斜太 斜 4000 ラΦキルへア他
FreeSerif 標伊  7972 ラΦキ へア他 文字種最多フォント
Unicode Large font DejaVu Sans 標 斜太 斜 5465 ラΦキルへア他
DejaVu Sans Condensed 標 斜太 斜 5465 ラΦキルへア他
DejaVu Sans Light 1799 ラΦキル
DejaVu Sans Mono 標 斜太 斜 3168 ラΦキ  ア他
DejaVu Serif 標伊  3063 ラΦキ   他
DejaVu Serif Condensed 標伊  3063 ラΦキ   他
一般名 monospace フォント不定
serif フォント不定
sans-serif フォント不定
ポストスクリプト Century Schoolbook L 標伊  561 ラ キ
Dingbats 201 Type1,非文字
Nimbus Mono L 標 斜太 斜 561 ラ キ
Nimbus Roman No9 L 標伊  561 ラ キ
Nimbus Sans L 標伊  668 ラ キ
Standard Symbols L 188  Φ Type1
URW Bookman L 標伊  543 ラ キ
URW Chancery L  伊 501 ラ キ 標準スタイルなし
URW Gothic L 標 斜太 斜 561 ラ キ
URW Palladio L 標伊  523 ラ キ
Symbol 188  Φ Type1
Bitstream Charter 標伊  227 Type1
Courier 10 Pitch 標伊  227 Type1
その他 OpenSymbol 909 記号
アラビア文字 KacstOne 443      ア
インド系文字 gargi 449 ラ(A-Z) デーバナーガリー文字
Lohit Hindi 352 デーバナーガリー文字
Mukti Narrow 標   601 ラ(A-Z) ベンガル文字
Lohit Bengali 484 ベンガル文字
Lohit Punjabi 155 グルムキー文字
Saab 197 グルムキー文字
Rekha 406 ラ(A-Z) グジャラーティー文字
Lohit Gujarati 344 グジャラーティー文字
ori1Uni 289 オリヤー文字
Lohit Tamil 245 タミル文字
Pothana2000 635 テルグ文字
Vemana2000 635 テルグ文字
Kedage 標   387 カンナダ文字
Mallige 標   387 カンナダ文字
Meera 1153 ラ(A-Z) マラヤーラム文字
Rachana 1095 ラ(A-Z) マラヤーラム文字
タイ文字 Garuda 標 斜太 斜 355
Kinnari 標伊斜太伊斜 239 ラ(A-Z) ファイル多過ぎ
Loma 標 斜太 斜 279 ラ(A-Z)
Norasi 標伊斜太伊斜 399 ファイル多過ぎ
Purisa 標 斜太 斜 405
Sawasdee 標 斜太 斜 359
Tlwg Typist 標 斜太 斜 331
Tlwg Typo 標 斜太 斜 326
TlwgTypewriter 標 斜太 斜 331
TlwgMono 標 斜太 斜 319
Umpush 標 斜太 斜 280 ラ(A-Z) 細いフォントあり
Waree 標 斜太 斜 408
ラオ文字 Phetsarath OT 290
クメール文字 Khmer OS 730
Khmer OS System 730
CJK統合漢字 文泉驛等寬微米黑 48640 ラΦキ   漢かカハ 中国語
文泉驛微米黑 48638 ラΦキ   漢かカハ 中国語
Takao Pゴシック 12738 ラΦキ   漢かカ 日本語
Takao P明朝 12738 ラΦキ   漢かカ 日本語
TakaoExゴシック 12505 ラΦキ   漢かカ 日本語
TakaoEx明朝 12505 ラΦキ   漢かカ 日本語
Takaoゴシック 12739 ラΦキ   漢かカ 日本語
Takao明朝 12739 ラΦキ   漢かカ 日本語
UnBatang 標   19458 ラΦキ   漢かカハ ハングル
UnDotum 標   19448 ラΦキ   漢かカハ ハングル

まとめ:

搭載フォントをひと通り調べて、文書作成で不要なフォントは区別できるようになりました。私が使えるのは日本語とローマ字や記号としてのラテン文字の一部なので、それ以外は不要です。Web閲覧時の「文字欠け」が気になるので全部削除するわけにもいきませんけど、時間を掛ければ「いい塩梅」にできそうな気がしました。

今のところ、残すべきフォントの優先順位は次のようになっています。

  1. Web の閲覧では、"Takao Pゴシック"、"Takao P明朝"、Takaoゴシック の3フォントは最低限必要ということが分かりました。一般名として sans-serif, serif, monospace を何にするか、ブラウザに指示する必要があるためです。
  2. Fontconfig システムの初期値では、 suns-serif として "Dejave Sans", "Takao Pゴシック" 、 serif として "Dejave Serif", "Takao P明朝" 、 monospace として Takaoゴシック が割り当てられていました。この2つのフォントグループはお薦めの組み合わせと思われるのでそのまま使うことにします。
  3. コアフォントは普及しているフォント集なので Webページ で指定されていることが多いようです。搭載しておくと読み易さを期待できると思います。
  4. ユニコードラージフォント(の類)は「重宝するかもしれない」と思います。
  5. ポストスクリプトフォントはシステムやPDFの閲覧に必要なものかもしれません。詳しいことが分からないので保留しておきます。
  6. 中国語フォントはユニコードのカバーに必要ですが、なくても困らないかもしれません。

削除しても(Ubuntuソフトウェアセンターから)再インストールできるものが多いので確認しながらぼちぼち試してみたいと思います。

その他に、
  • italic は「傾いた飾り付きの手書き風」スタイルで、 oblique は「傾いているだけ」のスタイルという違いがある。
  • ブラウザにはフォントスタイルを加工する機能があるので、「標準スタイル」だけのフォントだけでもそれほど困らない。
  • 中国語フォントには「ひらがな」「カタカナ」のグリフが収録されているので日本語フォントの代用になる。

ということも分かりました。

フォントのグループごとに分かったこともあるのですが、それは別の機会にまとめたいと思います。

2012/08/14

いくつかのブラウザのフォント設定(初期値)を比較しました。

ブラウザやOSが異なると、意図したフォントで表示されないことがあります。理由を知っておきたいのですが、「送り手」と「受け手」の事情があると思いますので、まずは、いくつかのブラウザでの設定方法の違いを整理しておきたいと思います。(設定は全て初期値です)

Firefox 14.0.1:(初期設定)

ubuntu10.04(Linux)版のFirefoxです。「Webページが指定したフォントを優先する」にチェックが入っています。

Windows(7)版のFirefoxの初期設定値です。Linux版と項目は同じですが「フォント」の指定が具体的な点で異なります。


Google Chrome 21.0.1180.57:(初期設定)

Linux版のGoogle Chrome です。すべて「Andale Mono」が選択されていますが、これは「何も選択していない」のと同様です。実際に閲覧すると「Webページが指定したフォントを優先する」という設定が有効であるような表示になっていましたが、無指定のWebページに備えて指定する必要がありそうです。


Internet Explorer 9:(初期設定)

「プロポーショナルフォント」と「等幅フォント」の二つだけを指定できるようです。それぞれ「適切な候補以外は選択できない」ように制限されているようです。

「ここで選択するフォントは、フォントが指定されていないWebページやドキュメントで表示されます」とあるので「Webページが指定したフォントを優先する」ようです。


まとめ:

ブラウザ プロポーショナル 明朝体 ゴシック体 等幅 Note
Firefox(Linux) ゴシック体 serif sans-serif monospace Webページ優先
Firefox(Windows) ゴシック体 MS P明朝 MS Pゴシック MS ゴシック Webページ優先
Chrome(Linux) - - - - Webページ優先
Internet Explorer MS Pゴシック なし なし MS ゴシック Webページ優先
調べた範囲では、どのブラウザも「(初期設定では)Webページ優先」でした。「設定を変える人は少ない」という前提ではWebページの指定フォントで表示される機会は多いわけですから、ブログなどを制作する側は「フォントの指定に注意をはらうこと」が大事なことに思えました。「このページは読みづらい」とならないよう、フォントの指定に注意したいと思います。

詳細は未確認ですが、OS毎に「搭載しているフォント」が異なるようです。全部のOSを調べるわけにもいきませんが、「適切なフォントの指定」のためには、ある程度調査する必要がありそうです。

ブラウザから見るフォントの種類には「プロポーショナル/等幅」と「明朝体/ゴシック体」の二つの軸があることが分かりました。Webページでフォントの指定がない場合、Windowsでは「MS P明朝」や「MS ゴシック」のように特定のフォントが使われるようですが、Linuxの場合は「特定のフォント」ではないようです。最終的には「何かが」選択される仕組みになっていると思いますが、その仕組みはわかりませんでした。これも調べる必要があると思います。

ubuntu(Linux)でブラウザの利用者がフォントを指定するのは面倒です。例えば、ubuntu(Linux)版のFirefoxで「等幅フォント」を変更しようとすると、候補に(同じ書体で)70以上の搭載フォント名が提示されます。「Internet Explorer」のように「等幅フォント」だけが表示されると楽な作業ですが、「プロポーショナルフォント」も混ざっているので「多少の負担」を強いられます。フォントの区別が怪しい状況では困難さが増すので、名前と姿を把握する努力は必要なようです。

2012/08/02

ハードディスクの気になるSMART値をメモ。

ハードディスクを交換して落ち着いた時期になったので、ubuntu10.04のディスクユーティリティで「SMART情報」を確認したのですが、気になる数字が見られました。経年変化を知るためには初期の状態を記録する必要があると思うので、メモしておきます。


Read Error Rate:

「値が0でない場合、ディスク表面または読み書きヘッドのどちらかに問題があります」となっていますが、評価は「Good」です。といっても「値」は「しきい値」と同じ「51」なので心配ですが、大丈夫なんでしょうか。

この値はピーク値のようです。前回確認した時は「10」だったような気がしますが、今回急上昇していました。ディスクの温度と関係があるのかもしれません。ディスク温度が「47°C」となっていたのでパソコンの蓋を開けると、「44°C」まで下がりました。


Power-off Retract Count:(積算値)

「ハードディスクに大きな負担を与える」ような事象のようです。無理に電源を切るようなことは滅多にしないので、この数値は多過ぎるように思いましたが、セットアップ時に何度か電源を切ったことを思い出しました。通常運転中の現在は、数字に変化はないようです。


Load/Unload Cycle Count:(積算値)

「プラッタ上のランディングゾーン(表面加工された非記録領域)に退避した回数」と読めたのですが、例外もあるようです。プラッタの外側に「ランプ」と呼ばれる待機場所を持った機種もあって、その場合も同様の表現になるようです。この機種の場合は正常に停止処理が行われた回数を示しているようなので、特に気にする必要はなさそうだと分かりました。


Uncorrectable Sector Count:(積算値)

「(ID:5)Reallocated Sector Count」の値が「1」だったんですが、「セルフテスト」の「詳細」というのを実行すると、2時間くらいかかりましたけど、その値は「0」になり、「(ID:198)Uncorrectable Sector Count」の値が「1」になりました。

セルフテスト(詳細)を実行することで、「バッドセクタ」の評価が変わったようです。現在の総合評価では「ディスクは正常です」となっていますが、セルフテスト以前の総合評価は「ディスクにはほんの数個のバッドセクタがあります」でした。今は問題ないようですが、しばらくの間は注意する必要がありそうです。


Write Error Rate:

「または」が2つあって、何を示している値なのかよくわかりません。よくわからない値ですが、数値の変化を把握しておく必要はありそうです。


CrystalDiskInfo:

違うソフトウェアでの評価も知りたかったので、Windows用の「CrystalDiskInfo」を使ってみました。

補)初回の評価から数日後の値ですが、「C1:ロード/アンロードサイクル回数」が増えています。

「ID:C6」の「回復不可能セクタ数」が黄色で「健康状態:注意」となっています。ubuntuのツールで見た時の「ID」は「198」でしたが、評価対象ではなかったようです。

同じハードディスクのSMART情報を異なるソフトウェアで確認したんですが、評価は同じではありませんでした。個人的には「注意が必要」と感じていたので、Windowsのツールの評価には妥当性があるように思えます。


まとめ:

最初の健康診断はパスしたようですが、読み書き時のエラー頻度やバッドセクタが発生していたことを考慮すると「要注意」だと思います。

「診断結果を見て何をすべきか、それを判断することが私にはできない」ということが分かりました。これが一番の収穫だったと思います。たくさんのハードディスクのSMART情報を見ている人と同じように解釈することは無理ですが、定期的に観察することで段々と理解できるようになるんだと思います。

ハードディスクの温度と故障率には因果関係があるそうなので、温度には気を付けたいと思います。この個体の場合は「45°C」を越えないようにすると良い気がしています。

2012/08/01

古いハードディスクのアームの動かし方(映像メモ)

アームの駆動方法は変わってきているようです。映像資料として幾つかピックアップしてみました。


MiniScribe製のハードディスク(1988年)ということです。リニア駆動のアームに見えましたけど、回転運動を直線運動に変える機構のようでした。リニアモーターではないようです。



メーカ不明の72MBハードディスクです。4枚プラッタ、4ヘッドと聞こえたので、1枚あたり18MBの容量があるようです。形状がやや複雑ですが、現在と同じスイングアームになっています。



ゴムローラーを押し当ててヘッドの位置決めをしているようです。こういう方法でも精度を保てた、ということが驚きです。アームを駆動するモータはステッピングモータのようです。



そして、現在のハードディスク。ボイスコイルモータというものを使ってアームを動かしているそうです。おかしな動きをしていますが、壊れているようです。

2012/07/30

仮想ディスクのファイル転送速度はホストOS並みのようです。

ubuntu10.04(ホストOS)に載せたubuntu10.04(ゲストOS)の仮想ディスクのベンチマークを採ったんですが、ホストOSとほとんど変わらない転送速度を示しました。

補)8GiB/464GiBという狭い範囲なので、「右肩下がり」のグラフにはなっていません。

仮想ディスクを確保したのは、ホストOSパーティションの前方です。

仮想ディスクに割り当てた場所のホストOSのベンチマーク結果は次のようになっています。

パーティションの使用状況をみると、全体の20%を過ぎたあたりに仮想ディスクが割り当てられているようです。

数値を見ると、ホストOS側では125MB/sくらいのようです。ゲストOSでは、122MB/s(平均)となっていますので、大きなファイルの「転送速度」はほとんど同じと言ってよさそうです。

平均アクセス時間の内訳を分析すると小さなファイルのアクセス性能を推測できそうなので、表にしてみました。

- 平均シーク時間 平均待ち時間 オーバーヘッド 合計
ホストOS 9ms 4.2ms 2.3ms 15.5ms
ゲストOS 0.2ms 4.2ms 3.8ms 8.2ms
「シーク時間」や「待ち時間」はハードウェア毎に決まった時間があります。その時間を引けば、OSの持つ「オーバーヘッド」を把握できると思います。

一つのファイルを処理するための「オーバーヘッド」は「3.8ms」くらいですが、ホストOSの「2.3ms」と比べてもそれほど悪くない値のようです。相応の「シーク時間」と「待ち時間」を加えると、(仮想ディスクのサイズにもよりますが)実際の平均アクセス時間は「6.7ms:8.5ms」程度なので、小さなファイルを大量に処理する操作以外では、速度差を体感するのは難しいように思います。

以上、「仮想マシン(VirtualBox)」のディスクアクセス性能は「思った以上に高かった」というお話でした。

補)個人的には「7割程度」の性能でも十分と考えていました。(2010年発表のビジネス用途向けパソコンで調査しました。)

特別な事情がなければ、パーティションを細切れにしてマルチブート環境を作るよりも、仮想環境で同時に複数のOSを動かす方が便利に作業できそうですね。私の場合はWindows7とのマルチブートですが、これにはもちろん特別な事情があります。

2012/07/27

ext4パーティションとLinuxカーネルの既知のバグ(VirtualBox)

新しいハードディスクにVirtualboxをインストールして古いハードディスクにあった仮想ディスクを移設すると、起動時に次のメッセージが表示されるようになりました。

メッセージの意味はよくわかりませんが、「違うファイルシステム」なら問題を避けることができそうです。以前は、VirtualBoxを「ext4」にインストールして、仮想ディスクを「ntfs」に置いていました。奇妙な使い方でしたが、今回の問題を(偶然)避けていたようです。

補)「put the disk image and the snapshot folder onto a different file system」としていました。

今回は、両方を「ext4」に導入しています。使い方を正したつもりでしたが「警告」を受けたのでファイルシステムを変更することにしました。「新しいから」という理由だけで「ext4」を使っていましたので、変更に抵抗はありません。

補)「located on an ext4 partition」→「located on an ext3 partition」としました。

ファイルシステムを「ext3」に変更すると、警告は出なくなりました。

入れ替えたあとで気が付いたんですが、「VirtualBoxの設定を変更する」という選択肢もあったようです。英語が苦手ということもあるんですが、「既知のバグ」という言葉に過剰に反応したようです。

補) 「enable the host I/O cache permanently in the VM settings」としませんでした。

振り返ると、警告を避けるために3つの選択肢があったのですが、最も手間のかかる方法を選択しました。

最終的な判断の根拠は乏しいので、この選択が正しいのか、間違っているのか、今のところわかりません。


「ext3」と「ext4」の違い:

エクステントは、ext2およびext3で使われてきた伝統的なブロックマッピング方式を置き換える概念である。エクステントは連続した物理ブロックの集合であり、大きなファイルに対するパフォーマンスを改善し、フラグメンテーションの発生を減らすことができる。ext4におけるエクステントは、4KBのブロックサイズで最大128MBまでの連続した領域をマッピングすることができる。inodeごとに4つのエクステントを格納することができる。ひとつのファイルに5つ以上のエクステントがあるとき、残りのエクステントはHtreeで構造化される。

「エクステント」という概念の有無が大きな違いのようです。

仮想ファイルは大きなファイルなのでパフォーマンスやフラグメンテーションの発生で多少不利な面がありそうですが、これは程度問題なので、致命的な不具合の発生を事前に避けられたことをよしとしたいと思います。

2012/07/26

ハードディスクの「線記録密度」などを調べるとプラッタ構造を推測できるようです。

ハードディスクの記録密度を表す指標に「線記録密度」「トラック密度」「面記録密度」があるそうです。特に線記録密度はディスクの「読み書き性能」に関係するので興味深いですが、カタログには載っていません。手持ちのハードディスクの外周部と内周部の書き込み性能を調べたついでに計算してみると次のようになりました。

項目 記号 内容 Note
型番 - WD5000AAKX-001CA0 500GB
プラッタ容量 - 500GB*1 -
セクタサイズ A 512 Byte -
セクタ総数 B 976773168 両面合計(公開領域)
セクタ総数 B' 1116312192 B*8/7(非公開領域を含む)
回転数 C 7200rpm -
平均シーク時間 - 9ms 一般的なPC用HDDのスペック
平均待ち時間 - 4.2ms プラッタが半周する時間
セクタ数(最外周) D 2246 sector/track 138MB/s*60/C/A
セクタ数(最内周) E 1159 sector/track 71.2MB/s*60/C/A
線記録密度 F 837,125 bit/inch 138MB/s*60/C*8/3.5Pi
トラック密度 G 385,586 track/inch B'/2/(D+E)/2/0.85inch
面記録密度 - 323 Giga bit/inch^2 F*G
キャッシュメモリ - 16MB -

外周部と内周部の書き込み速度(後述)を調べるとおおよその記録密度がわかるようです。分かったことからこのハードディスクのプラッタ構造を推測してみました。

  1. 7200回転/分の3.5インチハードディスクのプラッタ直径は、95ミリが一般的なようです。
  2. アームの長さと回転軸の位置は、中央のトラックにアクセスする時のヘッドの傾きが「0」となるよう調整されているようです。
  3. 1プラッタ2ヘッドの製品なので、大きなファイルのシーケンシャルライト時は2周して(両面に書き込んで)から隣のトラックにヘッドが移動するようです。
  4. ヘッドが隣のトラックに移動する時間は極めて短いです。同じ時間でのトラックの回転距離はセクタ1つ分もありません。
  5. この製品の場合は、全体の1/8程度が非公開領域となっているようです。
  6. トラックごとにアクセス時の動作周波数を変更することでセクタ数の違いに対応しているそうです。
  7. セクタの長さは一定(124μm)で、この中に512バイトのデータやECC情報、セクタ情報、隙間などが詰め込まれているそうです。
  8. プラッタには無数の小さな磁石が配置されています。この製品では、セクタ方向の間隔が狭いようなので、「トラック密度」を上げて「面記録密度」を向上させる余地があるようです。
  9. 外周部のパーティションは、「シークタイム」と「転送速度」の2つの面で性能上の利点があります。

ベンチマークテスト:

よく使われるソフトで「読み書き性能」を確認してみました。

補)465.76Gi(2^30)B=500G(10^9)Bです。(2^10=1024,10^3=1000)

4つのパーティションでテストすると、大体の傾向をつかめるようです。

補)8つのパーティションでも同じことをしてみたかったのですが、「論理ドライブ」を作れなかったので諦めました。


書き込み性能調査:(その1)

Linuxの「dd」コマンドを使って、全領域の「書き込み性能」を確認しました。(1GiB*464回)

4つのパーティションの「読み書き性能(ピンク)」を重ねたグラフです。「ほぼ一致」してますが、内周部分には「転送速度の低い領域」があります。ファイルシステム領域からの距離が関係するのかもしれません。

補)1GiBデータの書き込み速度は、140MB/s~69.2MB/sの範囲でした。グラフは4回ごとの平均値を記載しています。


パーティション分割:

実際に使う形でパーティションを分割してから比較テストを行います。

        0+----------------+
         | MBR Region     |マスターブートレコード領域(2048セクタ)1MiB
     2048|----------------|
         | Partition (1)  |Linux swap(8388608セクタ)4GiB
  8390656|----------------|
         | Partition (2)  |Linux /(33554432セクタ)16GiB
 41945088|----------------|
         | Partition (3)  |Linux /home(446443520セクタ)約212.88GiB
488388608|----------------| <-- ほぼ真ん中
         | Partition (4)  |Windos7(488384560セクタ)約232.88GiB
976773167+----------------+
       ↑パーティション開始セクタ(最終セクタ:976773167)
補)パーティションの開始セクタはすべて「2048の倍数」にしました。(特に意味はありません)


書き込み性能調査:(その2)

データ領域の書き込み位置と(パーティション先頭の)ファイルシステム領域の距離を縮めてみましたが、結果に違いはありませんでした。距離の影響ではなく、「内周付近ではプラッタの片面しか利用しない」という構造上の特徴が現れているようです。


「dd」コマンドが表示する時間:

プログラムがデータを送り始めてから、ハードディスクが受け取りを完了するまでの時間を表示するようです。ディスクのキャッシュに転送できた時点がゴールで、その後の作業時間は反映されません。

+-------+    +-------+    +-------+    +-------------------+
|       |    |       |    |       |    | 16MiB |   500GB   | 500GB HDD
|  CPU  | -> | Memory| -> | SATA2 | -> | Cache |  Platter  | シーク時間:9ms
|       |    |       |    |300MB/s|    |       |  140MB/s  | 待ち時間:4.2ms
+-------+    +-------+    +-------+    +-------------------+
512KiB Data   -->                      |-| 512KiB
1GiB Data     -->                      |-16MiB-|--1008MiB--|
キャッシュメモリよりも小さなファイルの転送時間は2ms程度と表示されました。平均的なプラッタへの書き込み時間は、次のようにデータと配置情報の2度の書き込みのために512KiBデータでは32msを必要としますが、表示されたのはボトルネックになった「伝送路」の通過時間(2ms)だけでした。

                    Data                        FAT
+-----------------+---------+-----------------+---------+ プラッタ全体での
| seek 1 | wait 1 | WRITE 1 | seek 2 | wait 2 | WRITE 2 | 平均的な
+-----------------+---------+-----------------+---------+ 書き込み時間
512KiB       13ms       6ms              13ms       -        32ms
1GiB         13ms   11500ms              13ms       -     11526ms
キャッシュメモリよりも大きなファイルの転送ではデータの書き込み時間のほとんどが反映されますが、配置情報の書き込み時間は反映されません。作業前にキャッシュメモリへの転送が完了しているからです。 データを書き込む前の「平均シーク時間」と「平均待ち時間」は、結果に反映されています。両方を合わせた時間は0~26msの幅を持ちますが、書き込み時間(11500ms)との比較では無視できるほど小さな値です。

補)512KiB程度の小さなファイルではシーク時間や待ち時間といった「オーバーヘッド」が転送速度を下げる大きな要因であることが分かります。


「dd」コマンドの利用方法:

記録媒体のメンテナンスでよく使われるコマンド形式のツールです。データの転送時間や速度を結果に表示するので利用しました。次のように無内容のデータを作り、任意のディレクトリにコピーすることもできます。

$ cd /media/589A-122A
/media/589A-122A$ sudo dd if=/dev/zero of=1gb001 bs=16384 count=65536 <--1回目
65536+0 記録始め
65536+0 記録終わり
1073741824 バイト (1.1 GB) コピー終了, 7.66519 s, 140 MB/s
 :
/media/589A-122A$ sudo dd if=/dev/zero of=1gb464 bs=16384 count=65536 <--464回目
65536+0 記録始め
65536+0 記録終わり
1073741824 バイト (1.1 GB) コピー終了, 14.8633 s, 72.2 MB/s
補)大きなファイルほどプラッタへの書き込み時間を「精度よく」計ることができます。


「『dd』コマンドが示す時間」を「プラッタに書き込む時間」に補正すると次のようになります。
  • 最外周:1056964608 バイト (1.1 GB) コピー終了, 7.65619 s, 138 MB/s
  • 最内周:1056964608 バイト (1.1 GB) コピー終了, 14.8503 s, 71.2 MB/s

小さなファイルは一瞬でキャッシュに格納されるのでプラッタの性能は計れません。

$ sudo dd if=/dev/zero of=512kb001 bs=16384 count=32
32+0 記録始め
32+0 記録終わり
524288 バイト (524 kB) コピー終了, 0.00119346 s, 439 MB/s
あるいは、
524288 バイト (524 kB) コピー終了, 0.00313677 s, 167 MB/s
補)瞬間の転送速度なので「439MB/s」や「167MB/s」となっていますが、測定を繰り返すと平均値はハードディスクの伝送路(SATA2)の上限値(300MB/s)に近づくようです。(FAT32の場合です。ファイルシステムによっては違う結果になることがあります)


読み込み性能:(ベンチマーク)

ubuntu10.04(Linux)標準のベンチマークソフト(ディスク・ユーティリティ)で読み込み性能を調べると次のようになりました。

補)フォーマット済みハードディスクの「書き込みベンチマーク」は実行できません。

読み込み性能ですが、これ以前のベンチマークと同様の結果が得られました。テストは数分で終わるので、短い時間で大体の性能を把握したい場合に使うといいかもしれません。


まとめ:

シーク時間を短くしたい場合は、ディスク使用率を下げるとよいかもしれません。使用量が同じでも、「250GB/500GB」と「250GB/250GB」では前者の平均シークタイムは後者の半分になります。小さなファイルにアクセスする場合のオーバーへッドとしてシークタイムのウェイトは大きいので、窮屈な(システム用)ハードディスクのレスポンスに不満がある場合は、(使い切れないほど)大きな容量の製品に置き換えることを検討してもよいと思います。

LinuxのようなOSで、システム領域(「/」)とユーザ領域(「/home」)をパーティションで分離することは、レスポンスを保つ上で一定の効果を期待できると思います。(「/boot」パーティションを作るのは起動時間を短めに保つ狙いがあるんですね。今やっと気が付きました。でも私には不要です)

プラッタの「線記録密度」は転送速度に直結し、「トラック密度」はシークタイムに関わるので、「面記録密度の高さ」は「性能面で有利」と言えそうです。その反面で、信頼性を心配する必要があるかもしれません。 「非公開領域」のことは分かりませんけど、大体の性能は把握できたのでOSを導入して使い始めたいと思います。

2012/07/23

ハードディスクの購入とパーティションサイズを検討した時のメモ

2年ほど前にBTOのパソコンで250GBのハードディスクを選択したんですが、仮想環境など利用するうち手狭になりました。容量自体は不足ないのですが、パーティティションの区切り方に問題があったようです。

現在のパーティション構成:

今思うと、どうしてこんなことをしたのか不思議な感じさえする「区画分け」になっています。「見通しの甘さ」がありましたが、それは「知らないことが多かった」せいだと思います。Linuxを使い始めたばかりの私には「適切な区分け」は難しい作業でした。

例えば、次のような構成なら特に問題はなかったかもしれません。

+--------------------+-+---------+---------------------------------------+
|      /dev/sda1     | |/dev/sda3|               /dev/sda4               |
|        64GiB       | |  16GiB  |                148GiB+                |
|        ntfs        | |  ext4   |                ext4                   |
|      windows7      | |  /      |                /home                  |
+--------------------+|+---------+---------------------------------------+
                      +---/dev/sda2(4GiB)Linux swap
これ(↑)は、2年ほど使ううちに考えた「今よりもましな構成の案」です。

パーティションを再構成して使いやすくしたいのですが、スムースに切り替えようと思えば新しいハードディスクを購入して入れ替えると間違いが少ないと思いましたので、使い方を整理して、機種選定を行いたいと思います。
  • Linux(メイン)とWindowsをデュアルブートする。
  • 仮想環境を割とよく使う。
  • サスペンドやハイバーネイトといった機能は使わない。
  • Linuxの入れ替えをスムースに行いたい。
  • とにかく安定して長く使えることが大事。
  • 高い性能は求めない。
  • 大容量を必要としない。

調べてみると、故障率を下げる要因に次のようなものがあることが分かりました。
  • プラッタの枚数が少ない。 → 1枚プラッタ
  • 回転数が低い。 → 5400rpm
  • 消費電力が低い。 → 4w以下

選定条件が決まったので候補を探すことにしたんですが、買い換え候補のハードディスクに「知らない技術や機能」が追加されていました。呼び名はメーカ独自のものらしいです。


新しい技術や機能:

  • Advanced Format Technology: 4KBセクタハードディスク
  • intellipower: 回転数の自動調整機能
  • intellipark: ヘッドの自動退避機能(8秒周期)

新しい機能について、「大きなお世話」と感じている人もいるようです。省エネタイプでとても魅力的でしたが、面倒は避けたいので機能のシンプルな製品を探すことにしました。

OSを入れるハードディスクとしては、とにかく「安定していること」が重要なので、今回は見送ります。最終的に決めたのは、次の製品です。


現行品と購入(予定)品:

項目 現行品 購入品 Note
型番 WD5000AAJX-75M0A0 WD5000AAKX 3.5"
インターフェイス SATA 2 SATA 3 3Gbps(300MB/s)/6Gbps(600MB/s)
容量 250GB 500GB -
セクタサイズ 512B 512B 古くからの小さいセクタです。
回転数 7200rpm 7200rpm 低速ではないですが、定速です。
キャッシュ 8MB 16MB -
シークタイム 8.9ms -ms -
プラッタ 160GB*2 500GB*1 枝番で枚数が分かるようです。
転送速度 - 126MB/s 最大値(Buffer to Disk)
Sequential Read 50MB/s *ベンチマーク -MB/s *ベンチマーク 転送速度の実効値(最大値)
Sequential Write 50MB/s *ベンチマーク -MB/s *ベンチマーク 転送速度の実効値(最大値)
消費電力 7.2w 6.1w アイドル時
騒音 25dBA 28dBA アイドル時
補)インターフェイス仕様が違いますが「下位互換性」があるようなので、コネクタ形状が同じなら問題なく使えると思います。

補)型番だけではプラッタ枚数は分からないようです。提供する側の人は「枝番」で枚数を区別できるようですが、一般には公開されないようです。転送速度などを頼りに推測する場合は、周辺の情報を集める必要もあると思います。

3つ上げた条件のうち、1つだけしか満たせませんでした。少し残念ですが、探すことにも疲れたので、この辺りでお終いにしようと思います。


AFT(Advanced Format Technology):

AFTは、ハードディスクの新しい規格に使われている技術の(メーカ独自の)呼称ということです。これまでハードディスクのセクタサイズは512バイトでしたが、新しい規格では4Kバイトになっているそうです。WindowsではVISTA以降で利用できるそうですが、Linuxの場合はどうなっているのかよくわかりません。


大容量ハードディスクでは4Kバイトセクタが当たり前となるようなので、仮想マシンで「fdisk」というツールの使い方を試してみることにしました。コマンドラインは次の通りです。
$ sudo fdisk /dev/sda
fdiskのバージョンは次の通りです。(ubuntu 10.04)
$ fdisk -v
fdisk (util-linux-ng 2.17.2)
最初に「DOS互換モードは廃止予定です。…」 というメッセージに従い、LBA方式でセクタを操作するモードに切り替えます。 その後はパーティションの始点を「8の倍数」で指定すればよいのですが、ツールの使い方を飲み込めるまでは結構難しかったです。

最終的には、ハードディスクの全セクタ数を把握して、各パーティションの開始セクタと終了セクタを「直接指示」する方法が確実だとわかりました。

直接指示した「始点」は次のように「8の倍数」です。1GiB分のセクタの倍数でもあります。終点に制限はないですが、パーティションのサイズがGiB単位になるよう調整しています。

パーティション 始点 終点 ブロック(KiByte) Note
/dev/sda1 2048 16777215 8387574(8GB-1MB) 512Byte*2048=1MiB
/dev/sda2 16777216 25165823 4194304(4GB) 1GB=4,194,304セクタで計算
/dev/sda3 25165824 41943039 8386608(8GB) -
/dev/sda4 41943040 - - 全部使う場合は終点指示は不要
補)仮想マシンでは、32GBの領域を確保し、8GB/4GB/8GB/12GBの区分けにしています。


最初のパーティションの始点は、「Windows7のパーティショニングツールとの兼ね合い」から「2048」が無難と推奨されていたので、その提案に従った結果です。

今度購入するハードディスクは「512バイト」セクタの製品ですが、将来4Kバイトセクタの製品を購入しても作業に困ることはないと思います。


新しいハードディスクのパーティションサイズ:

2年間での「/」領域の増加分を調べてみました。仮想マシンに新規インストールしたubuntuと実マシンにインストールしているubuntuのそれぞれで「ディスク使用量の解析」を実行すると、最初は2.6GBで、2年後には5.2GBになっていることがわかりました。

私の使い方ではシステム領域はそれほど増えなかったようなので、新しいハードディスクでは16GiBにしようと思います。5.2GBに対して十分な余裕がありますし、これ以上大きくてもメリットはないと思います。

+-------------------------------------+-------------------------------------+
| |/dev/sda2|        /dev/sda3        |             /dev/sda4               |
| |  16GiB  |         212GiB+         |              232GiB+                |
| |  ext4   |         ext4            |              ntfs                   |
| |  /      |         /home           |              Windows7               |
+|------------------------------------+-------------------------------------+
 +---/dev/sda1(4GiB)Linux swap
ubuntu(Linux)をメインに使います。Linuxからはntfs領域も操作できるので、普段は全ての領域を使えます。

スワップファイルは、主記憶と同じサイズにしておこうと思います。2割増くらいが「無難」かもしれませんが、スワップファイルに吐き出す頻度は少ないので、特に困ることはないと思います。

まとめ:

記録容量だけで選定するのは簡単ですが、「自分の使い方にあったものを探すのは大変」ということが分かりました。「壊れにくさ」と「扱いやすさ」を求めたわけですが、途中で挫折しています。売れ筋商品の中から選択するしかなかったからですが、私自身の調査能力の低さを悔やむしかありません。

Linuxのパーティションサイズを決めるのは最初は難しいと思います。使ってみないと「適切なサイズ」が分からないからです。パーティションを細分化することもあるようですが、その理由は私にはよくわかりません。今回、「/」と「/home」に分割することにしましたけど、この場合は「OS」の入れ替え作業が楽になるようです。その時が来れば分かると思いますが、もしかすると面倒なことが待っているのかもしれません。