Fedora 41 (6.11.10-300.fc41.x86_64) XFS
Create loopback image
$ fallocate -l 1.2G lodisk.img
Create loopback device
sudo losetup -f lodisk.img
Create XFS on the device
sudo mkfs.xfs /dev/loop1
Create 1GB file on the device
sudo dd if=/dev/random of=/mnt/tmp/file1 bs=1M count=1024
dfで空き容量を確認しておく
$ df -h /mnt/tmp
Filesystem Size Used Avail Use% Mounted on
/dev/loop1 1.2G 1.1G 63M 95% /mnt/tmp
$ ln /mnt/tmp/file1 /mnt/tmp/file2
file1とfile2は同じinode番号
$ ls -lih /mnt/tmp
total 2.0G
131 -rw-r--r--. 2 ori root 1.0G Dec 5 10:31 file1
131 -rw-r--r--. 2 ori root 1.0G Dec 5 10:31 file2
$ df -h /mnt/tmp
Filesystem Size Used Avail Use% Mounted on
/dev/loop1 1.2G 1.1G 63M 95% /mnt/tmp
空き容量はないけどreflink copyは成功する
$ cp --reflink /mnt/tmp/file1 /mnt/tmp/file3
Reflink copyはinodeは別
$ ls -lih /mnt/tmp
total 3.0G
131 -rw-r--r--. 2 ori root 1.0G Dec 5 10:31 file1
131 -rw-r--r--. 2 ori root 1.0G Dec 5 10:31 file2
132 -rw-r--r--. 1 ori ori 1.0G Dec 5 10:33 file3
dfで見たときの空き容量は変わらない
$ df -h /mnt/tmp
Filesystem Size Used Avail Use% Mounted on
/dev/loop1 1.2G 1.1G 63M 95% /mnt/tmp
普通にduすると、hardlinkはカウントされない
$ du -csh /mnt/tmp/*
1.0G /mnt/tmp/file1
1.0G /mnt/tmp/file3
2.0G total
duに -l
をつけるとhardlinkもカウントされる
$ du -l -csh /mnt/tmp/*
1.0G /mnt/tmp/file1
1.0G /mnt/tmp/file2
1.0G /mnt/tmp/file3
3.0G total