Solaris のシステム管理 (第 1 巻)

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

この節では、pax コマンドでファイルをコピーする方法について説明します。

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

  1. コピーしたいファイルが入っているディレクトリに移動します。

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

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


    $ pax -w -f /dev/rmt/0 filename ...

    -w

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

    -f /dev/rmt/0

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

    filename ...

    コピーしたいファイルとディレクトリを指定する。 

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


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

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


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

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

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

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

  2. ls コマンドと cpio コマンドを使用してファイルをテープにコピーします。


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

    ls

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

    cpio -oc

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

    > /dev/rmt/n

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

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

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


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

例 - ディレクトリ内のすべてのファイルをテープにコピーする (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 1999, b
drwx--x--x    2 kryten     users          0 Jul 14 09:26 1999, letters
-rw------t    1 kryten     users      10000 Jul 14 09:26 1999, letter1
-rw------t    1 kryten     users      10100 Jul 14 09:26 1999, letter2
-rw------t    1 kryten     users      11100 Jul 14 09:27 1999, letter3
-rw------t    1 kryten     users      12300 Jul 14 09:27 1999, letter4
drwx--x--x    2 kryten     users          0 Jul 14 09:27 1999, memos
-rw------t    1 kryten     users        400 Jul 14 09:28 1999, memosmemoU
-rw------t    1 kryten     users        500 Jul 14 09:28 1999, memosmemoW
-rw------t    1 kryten     users        100 Jul 14 09:27 1999, memosmemoX
-rw------t    1 kryten     users        200 Jul 14 09:28 1999, memosmemoY
-rw------t    1 kryten     users        150 Jul 14 09:28 1999, memosmemoZ
drwx--x--x    2 kryten     users          0 Jul 14 09:24 1999, reports
92 blocks
$

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


注 -

内容一覧を表示するには、cpio コマンドがアーカイブ全体を読み取るので、そのために要するのと同じ時間がかかります。


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

  2. cpio コマンドを使用してテープ上のファイルのリストを表示します。


    $ 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 1999, answers
-rw------t    1 kryten    users      800 Jul 14 09:36 1999, b
drwx--x--x    2 kryten    users        0 Jul 14 09:32 1999, sc.directives
-rw------t    1 kryten    users   200000 Jul 14 09:35 1999, direct241
drwx--x--x    2 kryten    users        0 Jul 14 09:32 1999, tests
-rw------t    1 kryten    users      800 Jul 14 09:36 1999, test13times
396 blocks

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

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


注意 - 注意 -

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


  1. ファイルを入れたいディレクトリに変更します。

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

  3. cpio コマンドを使用して、すべてのファイルをテープから現在のディレクトリにコピーします。


    $ 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 コマンドを使用してテープからファイルのサブセットを取り出します。


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

    -i

    テープの内容を読み込む。 

    -c

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

    -v

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

    "*file"

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

    < /dev/rmt/n

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

  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

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

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

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

    • ローカルホスト名 (および、オプションで、コピーしているユーザーのユーザー名) が、リモートシステムの /etc/hosts.equiv ファイル内になければならない。あるいは、コピーしているユーザーは、リモートマシン上の自分のホームディレクトリをアクセス可能にしておかなければならない。さらに、$HOME/.rhosts 内にローカルマシン名がなければならない。詳細は、hosts.equiv(4) を参照。

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

  2. リモートコマンドを実行するための適切なアクセス権を持っているかどうかをテストするには、次のように入力します。


    $ rsh remotehost echo test
    

    「test」と表示された場合、リモートコマンドを実行するためのアクセス権を持っています。「Permission denied」と表示された場合、上記の手順 1 の内容を確認してください。

  3. tar コマンドと dd コマンドを使用して、ファイルをリモートのテープドライブにコピーします。


    $ tar cf - files | rsh remotehost dd of=/dev/rmt/n obs=blocksize
    

    tar cf

    テープアーカイブを作成し、テープデバイスを指定する。 

    - (ハイフン)

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

    files

    コピーするファイル 

    | rsh remotehost

    tar コマンドの出力がパイプを通してリモートシェルに渡され、ファイルがコピーされる。

    dd of=/dev/rmt/n

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

    obs=blocksize

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

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

例 - ファイルをリモートテープドライブにコピーする (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. 一時ディレクトリに変更します。


    $ cd /var/tmp
    
  2. tar コマンドと dd コマンドを使用して、ファイルをリモートのテープドライブに抽出します。


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

    rsh remotehost

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

    dd if=/dev/rmt/n

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

    | tar xvBpf -

    dd コマンドの出力は tar コマンドにパイプされ、復元されたファイルに使用される。

  3. ファイルが抽出されたかどうかを確認します。


    $ ls -l /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 /var/tmp