tar形式のファイルを解凍するとハードリンク・シンボリックリンクを含むファイルがサイズ0になる

ALL
スポンサーリンク

Windows で tar形式のファイルを解凍した場合、アーカイブ元がハードリンク・シンボリックリンクだったファイルは、サイズ0で展開されることがあります。

例えば、下記は Cygwin のパッケージですが、これにはハードリンクのファイルが含まれています。

http://ftp.iij.ad.jp/pub/cygwin/x86/release/dash/dash-0.5.8-2.tar.xz

dash-0.5.8-2.tar.xz を Linux上で展開し、ファイルを見てみます。

tar xf dash-0.5.8-2.tar.xz
ls -li ./usr/bin

以下のように、iノードが 13898885 と一緒なので、ash.exe と dash.exe はハードリンクです。

13898885 -rwxr-xr-x 2 test test 97831 10月  1 08:26 ash.exe
13898885 -rwxr-xr-x 2 test test 97831 10月  1 08:26 dash.exe

これを Windows上で展開する場合、LhaForge(tar32.dll) , Lhaplus, 7-Zip では問題があります。
ハードリンクのファイル(上記ではファイル名 dash)のサイズが0バイトになって展開されます。

一方、Tar for Windowsでは正しく展開されます。
コマンド fsutil で確認してみると、アーカイブ元の通り、ファイル dash と ash がハードリンクで展開されています。

C:\tmp\usr\bin>fsutil hardlink list dash.exe
\tmp\usr\bin\dash.exe
\tmp\usr\bin\ash.exe

シンボリックリンクも同様で、Tar for Windowsでは正しく展開されます。
なお、シンボリックリンクは Windows上ではショートカットとして展開されます。
ハードリンクは先に示した通り、Windows上でもハードリンクで展開されます。

コメント