xenial (8) sfdisk.8.gz

Provided by: manpages-ja_0.5.0.0.20140515+dfsg-2_all bug

名前

       sfdisk - Linux 用のパーティションテーブル操作ツール

書式

       sfdisk [options] device
       sfdisk -s [partition]

説明

       sfdisk  には  (主に) 4 つの使用法があり、 パーティションサイズの一覧・ デバイス上のパーティションの一覧・
       デバイス上のパーティションのチェック・ デバイスのパーティション再分割 (これは非常に危険) ができる。

   サイズの一覧
       sfdisk -s partition とすると partition のサイズをブロック単位で表示する。 この使用法は mkswap  のようなプ
       ログラムと共に使う場合に便利である。 ここで、 partition は、普通 /dev/hda1/dev/sdb12 のようにするが、
       /dev/xda のようにディスク全体でもよい。
              % sfdisk -s /dev/hda9
              81599
              %
       パーティション引き数が省略された場合、 sfdisk は全てのディスクのサイズと合計をリストする:
              % sfdisk -s
              /dev/hda: 208896
              /dev/hdb: 1025136
              /dev/hdc: 1031063
              /dev/sda: 8877895
              /dev/sdb: 1758927
              合計: 12901917 ブロック
              %

   パーティションの一覧
       第 2 の呼び出し形式: sfdisk -l [options] device はデバイス上のパーティションをリストする。 デバイス引き数
       が省略された場合、 全てのハードディスク上のパーティションがリストされる。
       % sfdisk -l /dev/hdc

       ディスク /dev/hdc: ヘッド数 16、セクタ数 63、シリンダ数 2045
       ユニット = 516096 バイトのシリンダ、1024 バイトのブロック、0 から数えます

       デバイス ブート 始点   終点   #シリンダ #ブロック ID   システム
       /dev/hdc1          0+    406     407-   205096+  83  Linux native
       /dev/hdc2        407     813     407    205128   83  Linux native
       /dev/hdc3        814    2044    1231    620424   83  Linux native
       /dev/hdc4          0       -       0         0    0  空
       %
       数字の後ろに付いた  - と + 符号は、 丸めが行われており、本当の値は多少小さい (大きい) ことを示す。 正確な
       値を知るためには、セクタを単位としてリストすればよい。

   パーティションのチェック
       第 3 の呼び出し形式: sfdisk -V devicedevice  上のパーティションテーブルに対していろいろな整合性チェッ
       クを適用する。 `OK' または問題点が表示される。 -V オプションは -l と一緒に使うことができる。 シェルスクリ
       プトから使う場合は sfdisk -V -q device とすればステータスのみを返すこともできる。

   パーティションの作成
       第 4 の呼び出し形式: sfdisk device を用いると、 sfdiskdevice 用のパーティション分割指定を標準入力から
       読み込み、  そのディスクのパーティションテーブルを変更する。 よって、 sfdisk をシェルスクリプトから使うこ
       とができる。 sfdisk  が標準入力を端末と認識した場合は、対話的な動作に入る。  それ以外の場合は、何らかのエ
       ラーでアボート (abort) する。

       特に注意 - 1 つ打ち間違えるだけで全てのデータが失われる

       予防措置として、 sfdisk で変更されるセクタを保存することができる:
              % sfdisk /dev/hdd -O hdd-partition-sectors.save
              ...
              %

       こうすれば、(ディスクに何かを書き込む前なら)  何か馬鹿な間違いに気付いた場合に、 以下のようにして以前の状
       態に戻すことができる。
              % sfdisk /dev/hdd -I hdd-partition-sectors.save
              %

       (これは以前のパーティションテーブルを保存するのとは異なる: 以前のパーティションテーブルは -d オプションを
       使えば可読な形式で保存できる。  しかし、論理パーティションを作成した場合、 それを記述するセクタはディスク
       のどこかにあり、 以前のパーティションテーブルの一部ではないセクタに置かれる可能性もある。 よって、-O オプ
       ションで保存される情報は、 -d の出力のバイナリ版ではない。)

       多くのオプションがある。

オプション

       -v または --version
              sfdisk のバージョン番号を表示して、すぐに終了する。

       -? または --help
              使用法のメッセージを表示して、すぐに終了する。

       -T または --list-types
              認識されたタイプ (システム ID) を表示する。

       -s または --show-size
              パーティションのサイズをリストする。

       -g または --show-geometry
              指定されたディスクに関するカーネルのジオメトリ情報をリストする。

       -G または --show-pt-geometry
              指定されたディスクに関するカーネルのジオメトリ情報を、  パーティションテーブルを見て推測し、リスト
              する。

       -l または --list
              デバイスのパーティションをリストする。

       -d     sfdisk の入力として使えるフォーマットで、 デバイスのパーティションをダンプする。 例えば、
                  % sfdisk -d /dev/hda > hda.out
                  % sfdisk /dev/hda < hda.out
              は (OS/2 の fdisk が作った) 不正な最後の拡張パーティションを修正する。

       -V または --verify
              パーティションが正しいかをテストする (上記を参照)。

       -i または --increment
              シリンダ数を 0 ではなく 1 から数える。

       -N number
              指定された 1 つのパーティションだけを変更する。 例えば、
                  % sfdisk /dev/hdb -N5
                  ,,,*
                  %
              は /dev/hdb の第 5 パーティションをブート可能 (`アクティブ') にして、 他は変更しない (多分、この第
              5 パーティションは /dev/hdb5 と呼ばれるが、 `/my_equipment/disks/2/5' のような別の名前で呼ぶのも自
              由である)。

       -Anumber
              指定したパーティション  (複数でもよい)  をアクティブにして、  他のパーティションを非アクティブにす
              る。

       -c または --id number [Id]
              引き数  Id が指定されない場合: 指定されたパーティションの ID を表示する。 引き数 Id が指定されてい
              る場合:  指定されたパーティションのタイプ   (ID)   を与えられた値に変更する。   このオプションには
              --print-id と --change-id という 非常に長い形式がある。 例を示す:
                  % sfdisk --print-id /dev/hdb 5
                  6
                  % sfdisk --change-id /dev/hdb 5 83
                  OK
              最初に /dev/hdb5 が ID 6 であることを表示させ、 次に ID を 83 に変更している。

       -uS または -uB または -uC または -uM
              セクタ単位 (ブロック単位・シリンダ単位・メガバイト単位) の 数値を受け付け・表示する。 少なくともジ
              オメトリが分かる場合、デフォルトはシリンダ単位である。

       -x または --show-extended
              基本パーティションでない拡張パーティションも出力にリストする。  またそれらに対するパーティション設
              定を入力で受け付ける。

       -C cylinders
              シリンダ数を指定する。カーネルが想定している値を上書きできる。

       -H heads
              ヘッド数を指定する。カーネルが想定している値を上書きできる。

       -S sectors
              セクタ数を指定する。カーネルが想定している値を上書きできる。

       -f または --force
              たとえ馬鹿げたことであっても、指示したことを行わせる。

       -q または --quiet
              警告メッセージを表示しない。

       -L または --Linux
              Linux に関連しない警告を出さない。

       -D または --DOS
              DOS  との互換性のために、いくらかの領域を無駄にする  (より正確には: あるパーティションがデバイスの
              MBR だったり、 拡張パーティション用のパーティションテーブルを含んでいたりして セクタ 0  を持つこと
              ができない場合、通常  sfdisk は次のセクタからパーティションを開始する。 しかしこのオプションを指定
              すると、 デフォルトで次のトラックにスキップしてからパーティションを開始する。 例えば 34  セクタ/ト
              ラックの場合なら、  33 セクタが無駄になる。 これは、あるバージョンの DOS が行う動作と同じである)。
              ある種のディスクマネージャとブートローダ (OSBS などのことで、LILO や OS/2 ブートマネージャは含まれ
              ない) は この空き領域に置かれるので、 これらを使う場合には、このオプションが必要かもしれない。

       -E または --DOS-extended
              「内側」の拡張パーティションの開始セクタ番号を、 (Linux のように) 「外側」の拡張パーティションの開
              始セクタからの相対位置として取得せず、 (DOS のあるバージョンのように) 開始シリンタ境界からの相対位
              置として取得する。  (ここに違いがあるということは、 もし DOS と Linux がパーティションテーブルを同
              じ方法で解釈していれば、 拡張パーティションを常にシリンダ境界から始めなければならない、 ということ
              を意味する。 もちろん、どこにシリンダ境界があるかは、 DOS がディスクに対してどのようなジオメトリを
              使うかを 知っていなければわからない。)

       --IBM または --leave-last
              IBM のある診断プログラムは、 最後のシリンダをディスクチェックの目的で使用する。 もし、このようなプ
              ログラムを実行することがあるなら、 sfdisk に対して最後のシリンダを割り当てさせないように、このオプ
              ションを使うこと。 最後のシリンダに不正なセクタテーブルが含まれていることが時々ある。

       -n     全ての動作を通して実行するが、実際にはディスクに書き込まない。

       -R     (カーネルにパーティションテーブルを再び読み込ませるために) BLKRRPART ioctl のみを実行する。 最後の
              BLKRRPART が成功するかを前もってチェックするのに役立つ。 また (例えばバックアップから dd を使って)
              「手動で」パーティションテーブルを変更した場合などにも役立つ。  カーネルが   (`device   busy   for
              revalidation  (usage = 2)') という 警告を出した場合は、デバイスがまだ使われており、 ファイルシステ
              ムをアンマウントすべきである。 あるいはスワップパーティションなら swapoff を実行すべきである。

       --no-reread
              ディスクのパーティション再分割を始めると、  sfdisk  はディスクがマウントされていないか、  またはス
              ワップデバイスとして使われていないかをチェックする。 使われている場合には、続行を拒否する。 このオ
              プションを指定すると、このチェックを行わない。 (一方で、-f オプションは sfdisk  に対してテストが失
              敗した場合でも 強制的に続行させる。)

       -O file
              新しいパーティションを書き込む直前に、上書きされるセクタを  file に出力する (file は、他のディスク
              やフロッピーにある方が良い)。

       -I file
              不適切な sfdisk コマンドでファイルシステムを壊してしまった後でも以前の状態に回復できる。 これは -O
              フラグを使って以前の状態を保存してある場合にのみ可能である。

理論

       ディスクのブロック 0 (マスターブートレコード) には、 他に 4 つのパーティションディスクリプタがある。 ここ
       で説明するパーティションは 基本 パーティションと呼ばれる。

       パーティションディスクリプタには 6 つのフィールドがある:
              struct partition {
                  unsigned char bootable;        /* 0 または 0x80 */
                  hsc begin_hsc;
                  unsigned char id;
                  hsc end_hsc;
                  unsigned int starting_sector;
                  unsigned int nr_of_sectors;
              }

       2 つの hsc フィールドは、最初と最後のパーティションの ヘッド・セクタ・シリンダを示す。 各 hsc  フィールド
       は 3 バイトしかないので、 24 ビットしか使用できず、 大きなディスク (つまり 8GB より大きいディスク) には十
       分でない。 実際には、(通常は 16 であるヘッド数のために 1 バイトを使う) 無駄の多い表現のために、0.5GB から
       既に問題が起こる。  しかし、Linux はこのフィールドを使わず、 Linux が起動する前のブート時にのみ問題が生じ
       る可能性がある。 詳しくは、 lilo のドキュメントを参照すること。

       各パーティションにはタイプ `ID' がある。 ID が 5 または f  (`拡張パーティション')  の場合、  このパーティ
       ションの開始セクタにも 4 つのパーティションディスクリプタがある。 MSDOS は最初の 2 つしか使わない: 最初の
       1 つは実際のデータパーティションで  2  つめは、次の拡張パーティション  (または空)  である。  このようにし
       て、拡張パーティションの連鎖をつくる。  他の OS は少し異なる方法を使う。 Linux は 85 を 5 や f と同じもの
       として受け付ける - DOS FDISK をハングさせることなく 1024  シリンダを越えたところに  Linux  の拡張パーティ
       ションを作りたい場合に、  これが役立つ。 (正当な理由がない場合は、他の OS にも認識される 5 のみを使うべき
       である。)

       基本や拡張でないパーティションは、 論理 パーティションと呼ばれる。 大抵、論理パーティションからはブートで
       きない  (なぜなら、論理パーティションを見付けるプロセスは、 ただ MBR を探すのにくらべて更に複雑なためであ
       る)。 拡張パーティションでは、ID と開始点しか使われない点に注意すること。  他のフィールドに何を書くのかに
       は、いろいろな習慣がある。 データの保管やスワップには、拡張パーティションは使うべきではない。

入力フォーマット

       sfdisk は、以下の形式の行を読み込む。
              <start> <size> <id> <bootable> <c,h,s> <c,h,s>
       ここで各行は 1 つのパーティションディスクリプタに対応する。

       フィールドは空白・コンマ・セミコロンで区切られる  (これらの後に空白を置いてもよい)。 先頭と末尾の空白は無
       視される。 数字は 8  進・10  進・16  進を使うことができて、10  進がデフォルトである。  フィールドがない場
       合、または空白の場合、デフォルトの値が使われる。

       <c,h,s>  の部分は省略できる (たぶん省略すべきである) - これらは、 sfdisk が <start>, <size>, カーネルから
       与えられる ディスクジオメトリを使って計算するか、 -H, -S, -C フラグで指定される。

       ブート可能とするかどうかは  [*|-]  で指定する。  デフォルトではブート可能でない。   (このフィールドの値は
       Linux  とは関係ない。 - Linux が稼働しているなら、既にブート済みである - しかし、このフィールドはある種の
       ブートローダや他の OS で用いられる。 例えば、複数の DOS パーティションがある場合、 DOS はブート可能なもの
       の中から最初のものを C: に割り当てる。)

       ID は、プレフィックス 0x を付けない 16 進数か、[E|S|L|X] で指定される。 ここで L (LINUX_NATIVE (83)) はデ
       フォルトであり、 S は LINUX_SWAP (82), E は EXTENDED_PARTITION (5), X は LINUX_EXTENDED (85) である。

       start のデフォルト値は、割り当てられていない最初のセクタ/シリンダ/... である。

       size のデフォルト値は、(次のパーティションまたはディスクの終りまでの) 可能な限り大きな値である。

       しかし、拡張パーティションの内側の 4  つのパーティションのデフォルトは、  Linux  パーティション・拡張パー
       ティション・空・空である。

       ただし、(1 つのパーティションだけを変更する) -N オプションが指定された場合、 各フィールドのデフォルトは前
       の値になる。

       コマンド
              sfdisk /dev/hdc << EOF
              0,407
              ,407
              ;
              ;
              EOF
       は、先に説明したように /dev/hdc を分割する。

       コマンド
              sfdisk /dev/hdb << EOF
              ,3,L
              ,60,L
              ,19,S
              ,,E
              ,130,L
              ,130,L
              ,130,L
              ,,L
              EOF
       は、/dev/hdb を、3 シリンダと 60 シリンダの 2 つの  Linux  パーティション、  19  シリンダのスワップスペー
       ス、残りの拡張パーティションに分割する。  拡張パーティションの内部は  4 つの Linux 論理パーティションがあ
       り、 3 つは 130 シリンダで、1 つはその残りの部分である。

       -x オプションを使った場合、入力行数は 4 の倍数でなければならない: 使用しない 2  つの空パーティションを  2
       つの空行を使ってリストしなければならない。  -x  オプションを使わない場合、 拡張パーティションの内部のパー
       ティションに対して 4 行ではなく 1 行で指定し、 end-of-file (^D) で終了しなければならない。 (さらに sfdisk
       は、入力行が 4 つのパーティション中の 第 1 パーティションを表しているものと仮定する。 第 2 パーティション
       は拡張パーティションで、 第 3,4 は空である。)

DOS 6.x 向けの警告

       DOS 6.x の FORMAT  コマンドはパーティションのデータエリアの  第一セクタからある種の情報を検索し、  これを
       パーティションテーブルにある情報より信頼できるものとして扱う。 DOS の FORMAT は、容量が変更されたときには
       最初の 512 バイト分のデータ領域が DOS 版 FDISK によってクリアされていることを仮定している。 DOS の FORMAT
       はこの拡張情報を  /U フラグを指定した場合でも見ようとする - これは DOS FORMAT と DOS FDISK のバグであると
       我々は考える。

       結局のところ、 sfdisk を用いて DOS パーティションの容量を変更したときは、 DOS FORMAT を使ってパーティショ
       ンをフォーマットする前に dd を使って先頭の 512 バイトを 0 で埋めなければならない、というわけである。 例え
       ば sfdisk を用いて /dev/hda1 の DOS パーティションの  テーブルエントリを作成した場合には、(sfdisk  を終了
       し、 Linux をリブートしてパーティションテーブルの情報を有効にしたあとで) 先頭の 512 バイトを 0 にするため
       に "dd if=/dev/zero of=/dev/hda1 bs=512 count=1" などと実行する必要がある。 注意点: dd コマンドを使う場合
       には特に注意すること。 ちょっとしたタイプミスで、 ディスク上のすべてのデータが使えなくなる可能性もある。

       できるだけ問題を起こしたくなければ、 常に OS 固有のパーティションテーブル用プログラムを用いることである。
       例えば DOS パーティションは DOS FDISK プログラムで作り、 Linux のパーティションは Linux の sfdisk  で作る
       べきなのである。

DRDOS 向けの警告

       Stephen  Tweedie は次のように報告している (930515): 「スーパーブロックの破損に関する報告の大部分は、 1 つ
       のファイルシステムが次のファイルシステムの最初にはみ出して スーパーブロックを壊している、  といった不正な
       パーティション分割によるものである。 私は、信頼できると思っていた DRDOS でも、この問題に出会った。 これは
       多分 DRDOS-6.0 の FDISK コマンドによるものだろう。 DRDOS パーティションと直後のパーティションの間に  空白
       のトラックやシリンダを作成しない限り、 DRDOS は能天気にも次のパーティションの最初の部分を全て壊してしまっ
       た。 DRDOS パーティションの後に小さな空きディスク領域を置く限り、 1 つのドライブに 2 つのパーティションが
       存在しても 他に何も問題は起きない点に気を付けること。」

       A.  V. Le Blanc は README.efdisk で次のように書いている: 「Dr. DOS 5.0 と 6.0 は Linux と一緒に使うと問題
       があると報告されている。 このバージョンの efdisk には特に問題がある。 この efdisk  はファイルシステムタイ
       プを  16  進数の 81 に設定する。 Dr. DOS は、これを DOS コードである 16 進数の 1 と勘違いするようだ。 Dr.
       DOS を使う場合は、efdisk のコマンド 't' を使って Linux パーティションのシステムコードを変更し、 16 進数の
       80 より小さい値にすること。 さしあたりは、41 と 42 が良いかと思う。」

       A. V. Le Blanc は彼の README.fdisk で次のように書いている: 「DR-DOS 5.0 と 6.0 には 80 以上のパーティショ
       ン ID コードに 問題があるとの報告がある。 Linux `fdisk' は新しいパーティションのシステムタイプを 16  進数
       の  81  に設定する。 DR-DOS は、これを DOS コードである 16 進数の 1 と勘違いするようだ。 スワップを表す値
       82 とファイルシステムを表す値 83 については、 DR-DOS では問題は起きないはずだ。  しかし、もし問題が起こる
       ようならば、 fdisk のコマンド 't' を使って Linux パーティションのシステムコードを変更し、 16 進数の 80 よ
       り小さい値にすること。 さしあたりは、42 と 43 が良いかと思う。」

       実のところは、DRDOS FDISK は 4 ビットしか見ていないのだろう。 そのため、例えば 11 と 21 が DOS 2.0 として
       リストされている。  しかし、DRDOS  自身は 1 バイト全てを使っているように思われる。 私自身は、DRDOS とその
       fdisk による破壊を再現できていない。

バグ

       今のところ、対応する対話的な (curses インターフェースの) cfdisk がない。

       オプションが多すぎる。

       non-DOS パーティションタイプがサポートされていない。

関連項目

       cfdisk(8), fdisk(8), mkfs(8), parted(8)