Solaris のシステム管理 (基本編)

第 51 章 UFS ファイルとファイルシステムのコピー (手順)

この章では、各種のバックアップコマンドを使用して、UFS ファイルとファイルシステムをディスク、テープ、フロッピーディスクにコピーする方法について説明します。

この章で説明する手順は次のとおりです。

ファイルシステムをコピーするためのコマンド

ファイルシステム全体をバックアップして復元する場合は、第 50 章「UFS バックアップおよび復元コマンド (参照情報)」で説明した ufsdump コマンドと ufsrestore コマンドを使用します。個々のファイル、ファイルシステムの一部、またはファイルシステム全体をコピーまたは移動する場合は、ufsdumpufsrestore コマンドの代わりに、この章で説明する手順を使用できます。

次の表に、各種バックアップコマンドの用途を示します。

表 51–1 バックアップコマンドの用途

作業 

コマンド 

参照先 

ファイルシステムをテープにバックアップする 

ufsdump

ファイルシステムのバックアップをテープに作成する方法

ファイルシステムのスナップショットを作成する 

fssnap

第 48 章「UFS スナップショットの使用 (手順)」

ファイルシステムをテープから復元する 

ufsrestore

ファイルシステム全体を復元する方法

ファイルを他のシステムに転送する 

pax tar、または cpio

ファイルとファイルシステムをテープにコピーする

ファイルまたはファイルシステムをディスク間でコピーする 

dd

ディスクをコピーする方法 (dd)

ファイルをフロッピーディスクにコピーする 

tar

ファイルを 1 枚のフォーマット済みフロッピーディスクにコピーする方法 (tar)

次の表に、各種のバックアップおよび復元コマンドを示します。

表 51–2 バックアップコマンドの概要

コマンド名 

ファイルシステム境界の認識  

複数ボリュームバックアップのサポート 

物理コピー / 論理コピー 

volcopy

あり 

あり 

物理 

tar

なし 

なし 

論理 

cpio

なし 

あり 

論理 

pax

あり 

あり 

論理 

dd

あり 

なし 

物理 

ufsdump/ufsrestore

あり 

あり 

論理 

次の節では、各方法の長所と短所を説明し、コマンドの使用方法および例を示します。

ファイルシステムをディスク間でコピーする

ファイルシステムをディスク間でコピーするには、次の 2 つのコマンドを使用します。

次の節では、dd コマンドを使用してファイルシステムをディスク間でコピーする方法について説明します。

ファイルシステムのリテラルコピーを作成する

dd コマンドでは、UFS ファイルシステムのリテラル (ブロックレベル) コピーを別のファイルシステムやテープに作成します。デフォルトでは、dd コマンドはその標準入力を標準出力にコピーします。


注 –

可変長テープドライブで dd コマンドを使用するときは、必ず適切なブロックサイズを指定してください。


標準入力、標準出力、またはその両方の代わりに、デバイス名を指定できます。次の例では、フロッピーディスクの内容が /tmp ディレクトリ内のファイルにコピーされます。


$ dd < /floppy/floppy0> /tmp/output.file
2400+0 records in
2400+0 records out

dd コマンドは、読み取りブロック数と書き込みブロック数をレポートします。+ の次の数値は、部分的にコピーされたブロックの数です。デフォルトのブロックサイズは 512 バイトです。

dd コマンドの構文は、他のほとんどのコマンドとは異なっています。オプションは keyword=value のペアで指定します。この場合、keyword は設定するオプションで、value はそのオプションの引数です。たとえば、標準入力と標準出力を次の構文に置き換えることができます。


$ dd if=input-file of=output-file

上記の例のリダイレクト記号の代わりに keyword=value の形式で指定するには、次のように入力します。


$ dd if=/floppy/floppy0 of=/tmp/output.file

ディスクをコピーする方法 (dd)

  1. コピー元とコピー先のディスクが、同じディスクジオメトリを保持していることを確認します。

  2. スーパーユーザーになるか、同等の役割を引き受けます。

  3. /reconfigure ファイルを作成し、リブート時にシステムが追加するクローンディスクを認識するようにします。


    # touch /reconfigure
    
  4. システムをシャットダウンします。


    # init 0
    
  5. クローンディスクをシステムに接続します。

  6. システムをブートします。


    ok boot
    
  7. マスターディスクをクローンディスクにコピーします。


    # dd if=/dev/rdsk/device-name of=/dev/rdsk/device-name bs=block-size
    

    if=/dev/rdsk/device-name

    マスターディスクデバイスのオーバーラップスライスを指定する。通常はスライス 2。 

    of=/dev/rdsk/device-name

    クローンディスクデバイスのオーバーラップスライスを指定する。通常はスライス 2。 

    bs= blocksize

    ブロックサイズ (128K バイト、256K バイトなど) を指定できる。ブロックサイズの値を大きくすると、コピーに要する時間を短縮できる。 

    詳細については、dd(1M) のマニュアルページを参照してください。

  8. 新しいファイルシステムをチェックします。


    # fsck /dev/rdsk/device-name
    
  9. クローンディスクのルート (/) ファイルシステムをマウントします。


    # mount /dev/dsk/device-name /mnt
    
  10. クローンディスクの /etc/vfstab を編集して、正しいデバイス名を参照するようにします。

    たとえば、c0t3d0 のインスタンスをすべて c0t1d0 に変更します。

  11. クローンディスクのルート (/) ファイルシステムをマウント解除します。


    # umount /mnt
    
  12. システムをシャットダウンします。


    # init 0
    
  13. クローンディスクからシングルユーザーモードでブートします。


    # boot diskn -s
    

    注 –

    installboot コマンドをクローンディスクで実行する必要ありません。これは、ブートブロックがオーバーラップスライスの一部としてコピーされるためです。


  14. クローンディスクの構成を解除します。


    # sys-unconfig
    

    構成を解除すると、システムが停止します。

  15. 再びクローンディスクからブートし、ホスト名や時間帯などのシステム情報を与えます。


    # boot diskn
    
  16. スーパーユーザーとしてログインして、一度システムがブートした後のシステム情報を確認します。


    hostname console login:

例 — ディスクをコピーする (dd)

次の例では、マスターディスク /dev/rdsk/c0t0d0s2 をクローンディスク /dev/rdsk/c0t2d0s2 にコピーする方法を示します。


# touch /reconfigure
# init 0
ok boot
# dd if=/dev/rdsk/c0t0d0s2 of=/dev/rdsk/c0t2d0s2 bs=128k
# fsck /dev/rdsk/c0t2d0s2
# mount /dev/dsk/c0t2d0s2 /mnt 
# cd /mnt/etc
# vi vfstab
(新しいディスクのエントリを変更)
# cd /
# umount /mnt
# init 0
# boot disk2 -s
# sys-unconfig
# boot disk2

cpio を使用してファイルシステム間でディレクトリをコピーする

cpio (コピーインとコピーアウト) コマンドを使用して、個々のファイル、ファイルグループ、またはファイルシステム全体をコピーできます。この節では、cpio コマンドを使用してファイルシステム全体をコピーする方法について説明します。

cpio コマンドは、ファイルのリストを 1 つの大型出力ファイルにコピーするアーカイブプログラムです。また、復元しやすいように、個々のファイルの間にヘッダーを挿入します。cpio コマンドを使用すると、ファイルシステム全体を別のスライス、別のシステム、またはテープやフロッピーディスクなどのメディアデバイスにコピーできます。

cpio コマンドは、メディアの終わりを認識し、別のボリュームを挿入するように促すプロンプトを表示するので、複数のテープやフロッピーディスクが必要なアーカイブを作成するには最も効率のよいコマンド (ufsdump 以外では) です。

cpio の使用時には、しばしば lsfind のコマンドを使用してコピーするファイルを選択し、その出力を cpio コマンドにパイプします。

ファイルシステム間でディレクトリをコピーする方法 (cpio)

  1. スーパーユーザーになるか、同等の役割を引き受けます。

  2. 目的のディレクトリに移動します。


    # cd /filesystem1
    
  3. find コマンドと cpio コマンドを組み合わせて実行し、ディレクトリツリーを filesystem1 から filesystem2 へコピーします。


    # find . -print -depth | cpio -pdm filesystem2
    

    現在の作業ディレクトリで処理を始める。 

    -print

    ファイル名を出力する。 

    -depth

    ディレクトリ階層を下降してバックアップ中にファイル名を出力する。 

    -p

    ファイルのリストを作成する。 

    -d

    必要に応じてディレクトリを作成する。 

    -m

    ディレクトリ上で正しい変更時刻を設定する。 

    詳細については、cpio(1) のマニュアルページを参照してください。

    指定したディレクトリ名からファイルがコピーされます。シンボリックリンクは保持されます。

    また、-u オプションも指定できます。このオプションは、無条件にコピーを実行します。-u オプションを指定しない場合、古いファイルが、新しいファイルで置換されません。このオプションは、ディレクトリごとコピーしたいときに、コピーするファイルの一部がすでにターゲットのディレクトリ中に存在する場合に便利です。

  4. コピー先ディレクトリの内容を表示して、コピーに成功したかどうかを確認します。


    # cd /filesystem2
    # ls
    
  5. ソースディレクトリが不要な場合は削除します。


    # rm -rf /filesystem1
    

例 — ファイルシステム間でディレクトリをコピーする (cpio)


# cd /data1
# find . -print -depth | cpio -pdm /data2
19013 blocks
# cd /data2
# ls
# rm -rf /data1

ファイルとファイルシステムをテープにコピーする

tarpax、および cpio コマンドを使用すると、ファイルとファイルシステムをテープにコピーできます。どのコマンドを選択するかは、コピーする目的に応じて異なります。3 つのコマンドはすべて raw デバイスを使用するので、使用する前にテープ上でファイルシステムをフォーマットまたは作成する必要はありません。

表 51–3 tarpaxcpio コマンドの長所と短所

コマンド 

機能 

長所 

短所 

tar

ファイルやディレクトリサブツリーを 1 本のテープにコピーする場合に使用する。 

  • ほとんどの UNIX オペレーティングシステムで利用できる。

  • パブリックドメインバージョンもすぐに利用できる。

  • ファイルシステムの境界を認識しない。

  • 絶対パス名の長さが 255 文字を超えることができない。

  • 空のディレクトリや特殊ファイル (デバイスファイルなど) をコピーしない。

  • 複数のテープボリュームを作成する場合は使用できない。

pax

複数のテープボリュームを必要とするファイル、特殊ファイル、またはファイルシステムをコピーする場合に使用する。または、POSIX 準拠システムとの間でファイルをコピーする場合に使用する。 

  • POSIX 準拠システムに対する互換性は、tar コマンドや cpio コマンドよりもよい。

  • マルチベンダーサポート

tar コマンドの短所を参照。ただし、pax は、複数のテープボリュームを作成できる。

cpio

複数のテープボリュームを必要とするファイル、特殊ファイル、またはファイルシステムをコピーする場合に使用する。または、SunOS 5.9 システムから SunOS 4.0/4.1 システムにファイルをコピーする場合に使用する。 

  • tar コマンドよりも効率的に、データをテープに書き込む。

  • 復元時、テープ中の不良箇所をスキップする。

  • 異なるシステムタイプ間の互換性のために、異なるヘッダー形式 (tarustarcrcodcbar) でファイルを書き込むオプションを提供する。

  • 複数のテープボリュームを作成する。

tarpax コマンドよりも構文が難しい。

使用するテープドライブとデバイス名は、各システムのハードウェアの構成によって異なります。テープデバイス名の詳細については、使用するメディアの選択 を参照してください。

tar を使用してファイルをテープにコピーする

tar コマンドを使用してファイルをテープにコピーする前に、次のことを知っておかなければなりません。

ファイルをテープにコピーする方法 (tar)

  1. コピーするファイルの存在するディレクトリに移動します。

  2. 書き込み可能なテープをテープドライブに挿入します。

  3. ファイルをテープにコピーします。


    $ tar cvf /dev/rmt/n filenames
    

    c

    アーカイブの作成を指定する。 

    v

    各ファイルがアーカイブされるたびに、その名前を表示する。 

    f /dev/rmt/n

    アーカイブを指定したデバイスまたはファイルに書き込むように指定する。 

    filenames

    コピーするファイルとディレクトリを指定する。ファイルが複数の場合は、各ファイルをスペースで区切る。 

    指定した名前のファイルがテープにコピーされ、テープ上の既存のファイルが上書きされます。

  4. テープをドライブから取り出して、テープラベルにファイル名を記入します。

  5. コピーしたファイルがテープ上に存在することを確認します。


    $ tar tvf /dev/rmt/n
    

    tar テープ上のファイルを表示する方法については、テープ上のファイルのリストを表示する方法 (tar) を参照してください。

例 — ファイルをテープにコピーする (tar)

次の例では、3 つのファイルをテープドライブ 0 のテープにコピーします。


$ cd /export/home/kryten
$ ls reports
reportA reportB reportC
$ tar cvf /dev/rmt/0 reports
a reports/ 0 tape blocks
a reports/reportA 59 tape blocks
a reports/reportB 61 tape blocks
a reports/reportC 63 tape blocks
$ tar tvf /dev/rmt/n 

テープ上のファイルのリストを表示する方法 (tar)

  1. テープをテープドライブに挿入します。

  2. テープの内容を表示します。


    $ tar tvf /dev/rmt/n
    

    t

    テープ上のファイルの内容一覧が表示される。 

    v

    t オプションと一緒に使用すると、テープ上のファイルに関する詳細情報が表示される。

    f /dev/rmt/n

    テープデバイスを示す。 

例 — テープ上のファイルのリストを表示する (tar)

次の例では、ドライブ 0 のテープに含まれるファイルのリストを表示します。


$ tar tvf /dev/rmt/0
drwx--x--x   0/1        0 Jul 14 09:24 2001 reports/
-rw------t   0/1    30000 Jul 14 09:23 2001 reports/reportA
-rw------t   0/1    31000 Jul 14 09:24 2001 reports/reportB
-rw------t   0/1    32000 Jul 14 09:24 2001 reports/reportC

テープからファイルを取り出す方法 (tar)

  1. ファイルを置きたいディレクトリに移動します。

  2. テープをテープドライブに挿入します。

  3. テープからファイルを取り出します。


    $ tar xvf /dev/rmt/n [filenames]

    x

    指定したアーカイブファイルからのファイルの抽出を指定する。指定したドライブのテープに含まれるすべてのファイルが現在のディレクトリにコピーされる。 

    v

    各ファイルを取り出すたびに、その名前を表示する。 

    f /dev/rmt/n

    アーカイブを含むテープデバイスを示す。 

    filenames

    取り出すファイルを指定する。ファイルが複数の場合は、各ファイルをスペースで区切る。 

    詳細については、tar(1) のマニュアルページを参照してください。

  4. ファイルがコピーされていることを確認します。


    $ ls -l 
    

例 — テープ上のファイルを取り出す (tar)

次の例では、ドライブ 0 のテープからすべてのファイルを取り出す方法を示します。


$ cd /var/tmp
$ tar xvf /dev/rmt/0
x reports/, 0 bytes, 0 tape blocks
x reports/reportA, 0 bytes, 0 tape blocks
x reports/reportB, 0 bytes, 0 tape blocks
x reports/reportC, 0 bytes, 0 tape blocks
x reports/reportD, 0 bytes, 0 tape blocks
$ ls -l

注 –

テープから抽出されるファイル名は、アーカイブに格納されているファイル名と同一でなければなりません。ファイルの名前やパス名が不明な場合は、まずテープ上のファイルのリストを表示します。テープ上のファイルをリスト表示する方法については、テープ上のファイルのリストを表示する方法 (tar) を参照してください。


pax コマンドを使用してファイルをテープにコピーする

ファイルをテープにコピーする方法 (pax)

  1. コピーするファイルの存在するディレクトリに移動します。

  2. 書き込み可能なテープをテープドライブに挿入します。

  3. ファイルをテープにコピーします。


    $ pax -w -f /dev/rmt/0 filenames
    

    -w

    書き込みモードを有効にする。 

    -f /dev/rmt/0

    テープドライブを識別する。 

    filenames

    コピーするファイルとディレクトリを指定する。ファイルが複数の場合は、各ファイルをスペースで区切る。 

    詳細については、pax(1) のマニュアルページを参照してください。

  4. ファイルがテープにコピーされていることを確認します。


    $ pax -f /dev/rmt/0
    
  5. テープをドライブから取り出して、テープラベルにファイル名を記入します。

例 — ファイルをテープにコピーする (pax)

次の例は、pax コマンドを使用して、現在のディレクトリ内のファイルをすべてコピーする方法を示します。


$ pax -w -f /dev/rmt/0 .
$ pax -f /dev/rmt/0
filea fileb filec

cpio コマンドを使用してファイルをテープにコピーする

ディレクトリ内のすべてのファイルをテープにコピーする方法 (cpio)

  1. コピーするファイルの存在するディレクトリに移動します。

  2. 書き込み保護をしていないテープをテープドライブに挿入します。

  3. ファイルをテープにコピーします。


    $ ls | cpio -oc> /dev/rmt/n
    

    ls

    cpio コマンドにファイル名のリストを渡す。

    cpio -oc

    cpio コマンドがコピーアウトモード (-o) で動作し、ASCII 文字形式 (-c) でヘッダー情報を書き込むように指定する。このオプションにより他のベンダーのシステムとの互換性を保つ。

    > /dev/rmt/n

    出力ファイルを指定する。 

    ディレクトリ内のすべてのファイルは、指定したドライブ内のテープにコピーされ、テープ上の既存のファイルが上書きされます。コピーされた合計ブロック数が表示されます。

  4. ファイルがテープにコピーされていることを確認します。


    $ cpio -civt < /dev/rmt/n
    
  5. テープをドライブから取り出して、テープラベルにファイル名を記入します。

例 — ディレクトリ内のすべてのファイルをテープにコピーする (cpio)

次の例では、 /export/home/kryten ディレクトリ内のすべてのファイルをテープドライブ 0 のテープにコピーする方法を示します。


$ cd /export/home/kryten
$ ls | cpio -oc> /dev/rmt/0
92 blocks
$ cpio -civt < /dev/rmt/0
-rw------t    1 kryten     users        400 Jul 14 09:28 2001, b
drwx--x--x    2 kryten     users          0 Jul 14 09:26 2001, letters
-rw------t    1 kryten     users      10000 Jul 14 09:26 2001, letter1
-rw------t    1 kryten     users      10100 Jul 14 09:26 2001, letter2
-rw------t    1 kryten     users      11100 Jul 14 09:27 2001, letter3
-rw------t    1 kryten     users      12300 Jul 14 09:27 2001, letter4
drwx--x--x    2 kryten     users          0 Jul 14 09:27 2001, memos
-rw------t    1 kryten     users        400 Jul 14 09:28 2001, memosmemoU
-rw------t    1 kryten     users        500 Jul 14 09:28 2001, memosmemoW
-rw------t    1 kryten     users        100 Jul 14 09:27 2001, memosmemoX
-rw------t    1 kryten     users        200 Jul 14 09:28 2001, memosmemoY
-rw------t    1 kryten     users        150 Jul 14 09:28 2001, memosmemoZ
drwx--x--x    2 kryten     users          0 Jul 14 09:24 2001, reports
92 blocks
$

テープ上のファイルのリストを表示する方法 (cpio)


注 –

内容一覧を表示するには、cpio コマンドがアーカイブ全体を処理する必要があるため、かなりの時間がかかります。


  1. テープをテープドライブに挿入します。

  2. テープ上のファイルのリストを表示します。


    $ cpio -civt < /dev/rmt/n
    

    -c

    ファイルを ASCII 文字形式で読み込むように指定する。 

    -i

    cpio がコピーインモードで動作することを指定する。この時点ではファイルをリストするだけ。

    -v

    ls -l コマンドの出力と同様の形式で出力を表示する。

    -t

    指定したテープドライブ内のテープ上にあるファイルの内容一覧を表示する。 

    < /dev/rmt/n

    既存の cpio アーカイブの入力ファイルを指定する。

例 — テープ上のファイルのリストを表示する (cpio)

次の例では、ドライブ 0 のテープに含まれるファイルのリストを表示します。


$ cpio -civt < /dev/rmt/0
drwx--x--x    2 kryten    users        0 Jul 14 09:34 2001, answers
-rw------t    1 kryten    users      800 Jul 14 09:36 2001, b
drwx--x--x    2 kryten    users        0 Jul 14 09:32 2001, sc.directives
-rw------t    1 kryten    users   200000 Jul 14 09:35 2001, direct241
drwx--x--x    2 kryten    users        0 Jul 14 09:32 2001, tests
-rw------t    1 kryten    users      800 Jul 14 09:36 2001, test13times
396 blocks

テープからすべてのファイルを取り出す方法 (cpio)

相対パス名を使用してアーカイブを作成した場合、入力ファイルはそれを取り出すときに現在のディレクトリ内のディレクトリとして作成されます。ただし、絶対パス名を指定してアーカイブを作成した場合は、それと同じ絶対パス名を使用してシステム上でファイルが再び作成されます。


注意 – 注意 –

絶対パス名を使用すると、自分のシステム上にある元のファイルを上書きすることになるので危険です。


  1. ファイルを置きたいディレクトリに移動します。

  2. テープをテープドライブに挿入します。

  3. テープからすべてのファイルを取り出します。


    $ cpio -icvd < /dev/rmt/n
    

    -i

    標準入力からファイルを取り出す。 

    -c

    ファイルを ASCII 文字形式で読み込むように指定する。 

    -v

    取り出されたファイルを ls コマンドの出力と同様の形式で表示する。

    -d

    必要に応じてディレクトリを作成する。 

    < /dev/rmt/n

    出力ファイルを指定する。 

  4. ファイルがコピーされていることを確認します。


    $ ls -l
    

例 — テープからすべてのファイルを取り出す (cpio)

次の例では、ドライブ 0 のテープからすべてのファイルを取り出す方法を示します。


$ cd /var/tmp
$ cpio -icvd < /dev/rmt/0
answers
sc.directives
tests
8 blocks
$ ls -l

テープから特定のファイルを取り出す方法 (cpio)

  1. ファイルを置きたいディレクトリに移動します。

  2. テープをテープドライブに挿入します。

  3. テープからファイルのサブセットを取り出します。


    $ cpio -icv "*file" < /dev/rmt/n
    

    -i

    標準入力からファイルを取り出す。 

    -c

    ヘッダーを ASCII 文字形式で読み込むように指定する。 

    -v

    取り出されたファイルを ls コマンドの出力と同様の形式で表示する。

    "* file"

    パターンに一致するすべてのファイルを現在のディレクトリにコピーするように指定する。複数のパターンを指定できるが、個々のパターンを二重引用符で囲まなければならない。 

    < /dev/rmt/n

    入力ファイルを指定する。 

    詳細については、cpio(1) のマニュアルページを参照してください。

  4. ファイルがコピーされていることを確認します。


    $ ls -l
    

例 — 指定したファイルをテープから取り出す (cpio)

次の例では、末尾に接尾辞 chapter が付いているすべてのファイルをドライブ 0 のテープから取り出します。


$ cd /home/smith/Book
$ cpio -icv "*chapter" < /dev/rmt/0
Boot.chapter 
Directory.chapter 
Install.chapter 
Intro.chapter
31 blocks
$ ls -l

ファイルをリモートテープデバイスにコピーする

ファイルをリモートテープデバイスにコピーする方法 (tardd)

  1. リモートテープドライブを使用するには、次の前提条件を満たしている必要があります。

    1. ローカルホスト名 (および、オプションでコピーを実行するユーザーのユーザー名) が、リモートシステムの /etc/hosts.equiv ファイルに記述されている必要がある。または、コピーを実行するユーザーが、リモートマシン上の自分のホームディレクトリをアクセス可能にし、かつ $HOME/.rhosts 内にローカルマシン名を記述しておく必要がある。

      詳細については、hosts.equiv(4) のマニュアルページを参照。

    2. リモートシステムのエントリがローカルシステムの /etc/inet/hosts ファイル内またはネームサービスの hosts ファイル内になければならない。

  2. リモートコマンドの実行に必要なアクセス権を保持していることを確認するには、次のように入力します。


    $ rsh remotehost echo test
    

    test と表示された場合、リモートコマンドの実行に必要なアクセス権を保持しています。Permission denied と表示された場合は、手順 1 の内容を確認してください。

  3. ファイルを置きたいディレクトリに移動します。

  4. テープをテープドライブに挿入します。

  5. ファイルをリモートテープドライブにコピーします。


    $ tar cvf - filenames | rsh remote-host dd of=/dev/rmt/n obs=block-size
    

    tar cf

    テープアーカイブを作成し、アーカイブに含まれるファイルをリスト表示し、テープデバイスを指定する。 

    - (ハイフン)

    可変部としてテープデバイスの代わりに指定する。 

    filenames

    コピーするファイルを指定する。 

    | rsh remote-host

    tar コマンドの出力をパイプを通してリモートシェルに渡す。

    dd of= /dev/rmt/n

    出力デバイスを指定する。 

    obs= block-size

    ブロック係数を指定する。 

  6. テープをドライブから取り出して、テープラベルにファイル名を記入します。

例 — ファイルをリモートテープドライブにコピーする (tardd)


# tar cvf - * | rsh mercury dd of=/dev/rmt/0 bs=126b
a answers/ 0 tape blocks
a answers/test129 1 tape blocks
a sc.directives/ 0 tape blocks
a sc.directives/sc.190089 1 tape blocks
a tests/ 0 tape blocks
a tests/test131 1 tape blocks
6+9 records in
0+1 records out

ファイルをリモートテープデバイスから取り出す方法

  1. テープをテープドライブに挿入します。

  2. 一時ディレクトリに移動します。


    $ cd /var/tmp
    
  3. ファイルをリモートテープドライブから取り出します。


    $ rsh remote-host dd if=/dev/rmt/n | tar xvBpf -
    

    rsh remote-host

    dd コマンドを使用してテープデバイスからファイルを取り出すために起動するリモートシェル。

    dd if=/dev/rmt/n

    入力デバイスを指定する。 

    | tar xvBpf -

    dd コマンドの出力を tar コマンドにパイプして、ファイルを復元する。

  4. ファイルが抽出されたことを確認します。


    $ ls -l /var/tmp
    

例 — ファイルをリモートのテープドライブから抽出する


$ cd /var/tmp
$ rsh mercury dd if=/dev/rmt/0 | tar xvBpf -
x answers/, 0 bytes, 0 tape blocks
x answers/test129, 48 bytes, 1 tape blocks
20+0 records in
20+0 records out
x sc.directives/, 0 bytes, 0 tape blocks
x sc.directives/sc.190089, 77 bytes, 1 tape blocks
x tests/, 0 bytes, 0 tape blocks
x tests/test131, 84 bytes, 1 tape blocks
$ ls -l

ファイルとファイルシステムをフロッピーディスクにコピーする

ファイルやファイルシステムをフロッピーディスクにコピーする前に、フロッピーディスクをフォーマットする必要があります。フロッピーディスクをフォーマットする方法については、第 19 章「リムーバブルメディアのフォーマット (手順)」を参照してください。

tar コマンドを使用して、UFS ファイルを 1 枚のフォーマット済みフロッピーディスクにコピーします。

UFS ファイルを複数のフォーマット済みフロッピーディスクにコピーする必要があれば、cpio コマンドを使用します。cpio コマンドはメディアの終わりを認識し、次のボリュームの挿入を促すプロンプトを表示します。


注 –

ボリューム管理の関係で、cpio コマンドを使用して UFS ファイルを複数のフォーマット済みフロッピーディスクにコピーする手順は単純ではありません。


ファイルをフロッピーディスクにコピーする際の注意事項

詳細については、tar(1) のマニュアルページを参照してください。

ファイルを 1 枚のフォーマット済みフロッピーディスクにコピーする方法 (tar)

  1. コピーするファイルの存在するディレクトリに移動します。

  2. 書き込み保護されていないフォーマット済みフロッピーディスクをドライブに挿入します。

  3. フロッピーディスクを使用可能な状態にします。


    $ volcheck
    
  4. 必要に応じて、再度フォーマットします。


    $ rmformat -U /dev/rdiskette
    Formatting will erase all the data on disk.
    Do you want to continue? (y/n)y
    
  5. ファイルをフロッピーディスクにコピーします。


    $ tar cvf /vol/dev/aliases/floppy0 filename ...

    指定した名前のファイルがフロッピーディスクにコピーされ、フロッピーディスク上の既存のファイルがすべて上書きされます。

  6. ファイルがコピーされていることを確認します。


    $ tar tvf /vol/dev/aliases/floppy0
    

    ファイルのリストを表示する方法については、フロッピーディスク上のファイルのリストを表示する方法 (tar) を参照してください。

  7. フロッピーディスクをドライブから取り出します。

  8. ファイル名をフロッピーディスクラベルに記入します。

例 — ファイルを 1 枚のフォーマット済みフロッピーディスクにコピーする (tar)

次の例では、2 つのファイルをフロッピーディスクにコピーします。


$ volcheck
$ cd /home/smith
$ ls evaluation*
evaluation.doc   evaluation.doc.backup
$ tar cvf /vol/dev/aliases/floppy0 evaluation*
a evaluation.doc 86 blocks
a evaluation.doc.backup 84 blocks
$ tar tvf /vol/dev/aliases/floppy0

フロッピーディスク上のファイルのリストを表示する方法 (tar)

  1. フロッピーディスクをドライブに挿入します。

  2. フロッピーディスクを使用可能な状態にします。


    $ volcheck
    
  3. フロッピーディスク上のファイルのリストを表示します。


    $ tar tvf /vol/dev/aliases/floppy0
    

例 — フロッピーディスク上のファイルのリストを表示する (tar)

次の例では、フロッピーディスク上のファイルのリストを表示します。


$ volcheck
tar tvf /vol/dev/aliases/floppy0
rw-rw-rw-6693/10  44032 Jun  9 15:45 evaluation.doc
rw-rw-rw-6693/10  43008 Jun  9 15:55 evaluation.doc.backup
$

ファイルをフロッピーディスクから取り出す方法 (tar)

  1. ファイルを置きたいディレクトリに移動します。

  2. フロッピーディスクをドライブに挿入します。

  3. フロッピーディスクを使用可能な状態にします。


    $ volcheck
    
  4. ファイルをフロッピーディスクから取り出します。


    $ tar xvf /vol/dev/aliases/floppy0
    

    フロッピーディスク上のすべてのファイルが現在のディレクトリにコピーされます。

  5. ファイルが取り出されたことを確認します。


    $ ls -l
    
  6. フロッピーディスクをドライブから取り出します。

例 — ファイルをフロッピーディスクから取り出す (tar)

次の例では、フロッピーディスクからすべてのファイルを取り出します。


$ volcheck
$ cd /home/smith/Evaluations
$ tar xvf /vol/dev/aliases/floppy0
x evaluation.doc, 44032 bytes, 86 tape blocks
x evaluation.doc.backup, 43008 bytes, 84 tape blocks
$ ls -l

次の例では、フロッピーディスクから個々のファイルを取り出します。


$ volcheck
$ tar xvf /vol/dev/aliases/floppy0 evaluation.doc
x evaluation.doc, 44032 bytes, 86 tape blocks
$ ls -l

指定した名前のファイルがフロッピーディスクから取り出され、現在の作業ディレクトリに格納されます。

ファイルを複数のフロッピーディスクにアーカイブする方法

大量のファイルをフロッピーディスクにコピーする場合は、いっぱいになったフロッピーディスクを別のフォーマット済みフロッピーディスクと交換するように促すプロンプトを表示させることができます。cpio コマンドにはこの機能があります。使用する cpio コマンドはファイルをテープにコピーする場合と同じですが、テープデバイス名ではなくデバイスとして /vol/dev/aliases/floppy0 を指定します。

cpio コマンドの使用方法については、ディレクトリ内のすべてのファイルをテープにコピーする方法 (cpio) を参照してください。

ファイルを別のヘッダー形式でコピーする

SunOS 5.9 の cpio コマンドを使用して作成したアーカイブには、SunOS の旧リリースとの互換性がない場合があります。cpio コマンドを使用すると、他の複数の形式で読み込めるアーカイブを作成できます。これらの形式は、-H オプションと次のいずれかの引数で指定します。

ヘッダーオプションを使用する場合の構文を次に示します。


cpio -o -H header-option < file-list> output-archive

SunOS の旧リリース用のアーカイブを作成する方法

cpio コマンドを使用してアーカイブを作成します。


$ cpio -oH odc < file-list > /dev/rmt/n

引数 -H は、入力に対して出力の場合と同じ意味を持ちます。-H オプションを使用してアーカイブを作成した場合は、読み込むときにも同じオプションを使用しないと、cpio コマンドが失敗します。次の例には、cpio のエラーメッセージが含まれています。

例 — SunOS の旧リリース用にアーカイブを作成する


$ find . -print | cpio -oH tar> /tmp/test
113 blocks
$ cpio -iH bar < /tmp/test
cpio: Invalid header "bar" specified
USAGE:
        cpio -i[bcdfkmrstuvBSV6] [-C size] [-E file] [-H hdr]
 
[-I file [-M msg]] [-R id] [patterns]
        cpio -o[acvABLV] [-C size] [-H hdr] [-O file [-M msg]]
        cpio -p[adlmuvLV] [-R id] directory

各種オプションを使用してアーカイブを作成するときには、必ずメディアのラベルにアーカイブ上のファイル名やファイルシステム名と一緒にコマンド構文を記入してください。

アーカイブの作成時にどの cpio オプションを使用したかがわからない場合は、各種オプションをいろいろ組み合わせてみて、どの方法でアーカイブを読み込むことができるかを調べてください。

オプションのリストについては、cpio(1) のマニュアルページを参照してください。

bar コマンドで作成したファイルを取り出す

SunOS 4.0 または 4.1 の bar コマンドを使用してアーカイブしたファイルをフロッピーディスクから取り出すには、cpio- H bar オプションを使用します。


注 –

ファイルを取り出すには、-H bar オプションと共に -i オプションを使用する必要があります。bar ヘッダーオプションを使用してファイルを作成することはできません。


bar ファイルをフロッピーディスクから取り出す方法

  1. ファイルを置きたいディレクトリに移動します。

  2. フロッピーディスクをドライブに挿入します。

  3. フロッピーディスクを使用可能な状態にします。


    $ volcheck
    
  4. フロッピーディスクから bar ファイルを取り出します。

    フロッピーディスク上のすべてのファイルが現在のディレクトリにコピーされます。


    $ cpio -ivH bar < /vol/dev/aliases/floppy0