web-dev-qa-db-ja.com

マウントされたWindows共有でUNIXハードリンクを使用できますか?

lnコマンドは、マウントされたWindows共有にハードリンクを作成できますが、cp -alは失敗します。これは予想される動作ですか? cowdancerrsync、およびcp -alを使用して、書き込みスタイルのバックアップにコピーを作成することにより、ディスク領域を節約しようとしています。

backupuser@lan0:/mnt/backup/share$ mkdir a
backupuser@lan0:/mnt/backup/share$ touch a/b
backupuser@lan0:/mnt/backup/share$ cp -al a x
cp: cannot create hard link `x/b' to `a/b': No such file or directory
backupuser@lan0:/mnt/backup/share$ mkdir x
mkdir: cannot create directory `x': File exists
backupuser@lan0:/mnt/backup/share$ ln a/b x/b
backupuser@lan0:/mnt/backup/share$ ls -l x
total 0
-rwxr-xr-x 0 backupuser backupuser 0 Dec 23 17:33 b

更新:lnは実際にはコピーを作成しており、実際のリンクではありません

6
Pirate Praveen

SAMBAをサーバーとして実行していますか?次に、「smb.conf」で「unixextensions」を探して有効にします。

https://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html#UNIXEXTENSIONS

「unixextensions」を有効にすると、SAMBAはハードリンク、unix所有権情報、およびファイルとディレクトリのモード(別名パーミッション)をサポートします。

ただし、この設定はグローバル設定です。したがって、UNIX拡張機能を有効にすると、すべての共有に影響します(必要な場合とそうでない場合があります)。

5
Daniel K.

私は最近、サーバーとしてWindows 10Proを使用してこれをテストしました。私のLinuxシステムはCentOS7を実行しており、今日の時点でSamba4.4.4が出荷されています。ハードリンクは、ローカルファイルシステムと同じようにうまく機能します。

テスト:

/mnt/f/tmp# mkdir a
/mnt/f/tmp# touch a/b
/mnt/f/tmp# cp -al a x
/mnt/f/tmp# stat a/b
  File: ‘a/b’
  Size: 0           Blocks: 0          IO Block: 16384  regular empty file
Device: 28h/40d Inode: 1688849861497214  Links: 2
Access: (0755/-rwxr-xr-x)  Uid: ( 1000/   yanli)   Gid: ( 1000/   yanli)
Context: system_u:object_r:cifs_t:s0
Access: 2017-05-17 14:31:43.564755100 -0700
Modify: 2017-05-17 14:31:43.564755100 -0700
Change: 2017-05-17 14:31:46.571727600 -0700
 Birth: -
/mnt/f/tmp# stat x/b
  File: ‘x/b’
  Size: 0           Blocks: 0          IO Block: 16384  regular empty file
Device: 28h/40d Inode: 1688849861497214  Links: 2
Access: (0755/-rwxr-xr-x)  Uid: ( 1000/   yanli)   Gid: ( 1000/   yanli)
Context: system_u:object_r:cifs_t:s0
Access: 2017-05-17 14:31:43.564755100 -0700
Modify: 2017-05-17 14:31:43.564755100 -0700
Change: 2017-05-17 14:31:46.571727600 -0700
 Birth: -
/mnt/f/tmp# echo something >a/b
/mnt/f/tmp# cat x/b
something
/mnt/f/tmp# mount | grep /mnt/f
//192.168.1.7/f on /mnt/f type cifs (rw,nosuid,nodev,noexec,relatime,vers=1.0,cache=strict,username=redacted,domain=REDACTED,uid=1000,forceuid,gid=1000,forcegid,addr=192.168.1.7,file_mode=0755,dir_mode=0755,nounix,serverino,mapposix,rsize=61440,wsize=65536,echo_interval=60,actimeo=1,user)

ご覧のとおり、ファイルa/bおよびx/bは同じiノード番号を持ち、同じiノードへのハードリンクであることを示します。 1つのファイルの内容を変更すると、他のファイルにも影響します。

lnも正しく機能します。

CIFSのマウントに特別なオプションは使用されませんでした。すべてのオプションがデフォルトでした。 Windows側でも特別なことは何もしませんでした。これは、Windows 10Proのデフォルトのインストールとプレーンな共有フォルダーです。

私がまだ知らないのは、この機能がCIFS/Sambaクライアント/ Windowsにいつ追加されたかです。 OPは「Windows共有」としか言っていないので、実行しているWindows/Sambaのバージョンは明確ではありません。私の答えが、Windowsサーバーに支えられたCIFSマウント共有でハードリンクを作成するのに問題がある人に役立つことを願っています。 Windows 10Proと少なくともSamba4.4.4にアップグレードすることで問題を解決できます(CentOSは最も光沢のある最新のコードを出荷することで知られていません)。

0
Yan Li