Windowsのファイル共有上で、Linuxからアクセス権などの情報消失無しにファイル操作する

ALL
スポンサーリンク

Windows用のファイル共有で、Linuxからアクセス権などの情報消失無しにファイル操作する方法です。
NTFSやFATでフォーマットされたNAS製品や、Sambaサーバ上でも同様に出来ます。

Windows用のファイル共有は、NTFSやFATでフォーマットされています。
このファイル共有を、Linuxサーバからのバックアップ先に使うと、WindowsとLinuxではファイルシステムが異なるので、ユーザやアクセス権限などの情報が消失してしまいます。

そこで、Windows上のファイル共有上に大きなファイルを用意し、これを1つのディスク領域に見立ててLinuxのファイルシステムでフォーマットします。
これをLinuxから使用することで、間接的に、Windows上のファイル共有上で、ユーザやアクセス権限などの情報消失無しにファイル操作が可能になります。

イメージファイルの用意

まず、1つのディスク領域に見立てるイメージファイルを用意します。
このイメージファイルの大きさが、そのままディスク領域のサイズになると考えて下さい。

但し、このイメージファイルのサイズの上限は、Windowsのファイル共有のファイルシステムの制限を受けます。
この制限は、各ファイルシステムで作成できるファイルサイズで、以下になります。

FAT32:4GB
exFAT:制限なし
NTFS :制限なし

イメージファイルの作成は、Linux 上で ddコマンドで行います。

下記のように実行します。
ofが作成するファイルの名前、bsの値×countの値=作成サイズ、です。
以下例では、10GBのイメージファイルをファイル名 fs.dat で作成しています。

dd if=/dev/zero of=fs.dat bs=1G count=10

次に、このイメージファイルを1つのディスク領域に見立て、Linuxのファイルシステムでフォーマットします。
下記のように実行します。
以下例では、ファイルシステム ext4 でフォーマットしています。

mkfs.ext4 fs.dat

イメージファイルのマウント

先の手順で作成したイメージファイル fs.dat を、Windowsのファイル共有上にコピーし、Linuxからアクセスできるか確認して下さい。

アクセスできるようになっていない場合、以下のように実行します。
ディレクトリ /mnt/fs1 にアクセスすると、Windowsのファイル共有にアクセスできるようになるので、そこに fs.dat をコピーします。
太字の箇所は、Windowsのファイル共有の設定によります。

mkdir /mnt/fs1
/sbin/mount.cifs //サーバ/共有名 /mnt/fs1 -o user=ユーザ,password=パスワード,uid=root,gid=root

これで、イメージファイルにアクセスできるようになりました。
更に、このイメージファイルを Linuxのファイルシステムとして扱えるようにします。

以下のように実行します。
fs.dat の場所が異なる場合は、/mnt/fs1/fs.dat の箇所を変えて下さい。

mkdir /mnt/fs2
mount -o loop -t ext4 /mnt/fs1/fs.dat /mnt/fs2

これで /mnt/fs2下を Linux のディレクトリのように扱えます。

これで、Windowsのファイル共有上のfs.dat を、Linux上の /mnt/fs2 として扱うことが出来、ファイルのやアクセス権などの情報が無くなることもありません。

参考

NTFS の領域にLinux の権限付きでバックアップ – matoken’s meme -hatena-

コメント