Filesystem XFS yang baru dibuat menunjukkan 78 GB yang digunakan

18

Kami memiliki array 12 TB RAID 6 yang seharusnya diatur sebagai partisi tunggal dengan sistem file XFS . Saat membuat sistem file baru, dikatakan memiliki 78 GB digunakan, tetapi tidak ada file pada drive.

[root@i00a ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         32G     0   32G   0% /dev
tmpfs            32G     0   32G   0% /dev/shm
tmpfs            32G   11M   32G   1% /run
tmpfs            32G     0   32G   0% /sys/fs/cgroup
/dev/sdb3       154G  3.9G  150G   3% /
/dev/sdb2      1014M  153M  862M  16% /boot
/dev/sdb1       599M  6.7M  593M   2% /boot/efi
/dev/sdc1       187G  1.6G  185G   1% /var
tmpfs           6.3G     0  6.3G   0% /run/user/0
/dev/sda1        11T   78G   11T   1% /export/libvirt

Apakah saya melakukan sesuatu yang salah? Apakah ini berdasarkan desain?

Sepertinya log sistem file hanya membutuhkan sekitar 2 GB, dan saya tidak tahu apa lagi yang bisa menggunakan ruang tersebut.

[root@i00a ~]# xfs_info /export/libvirt/
meta-data=/dev/sda1              isize=512    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=2929458688, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Informasi partisi:

[root@irb00a ~]# parted /dev/sda1
GNU Parted 3.2
Using /dev/sda1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Unknown (unknown)
Disk /dev/sda1: 12.0TB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system  Flags
 1      0.00B  12.0TB  12.0TB  xfs

Ini adalah Dell FX2 dengan empat node menghitung FC430 dan dua node penyimpanan FD332, yang menjalankan Red Hat Enterprise Linux 8 ( Ootpa ).

yakatz
sumber
Apakah ini benar-benar kosong? Mencoba mereproduksi (dengan gambar 12TB, pengaturan mkf default bsize=4096 blocks=2929687500), df -hhasilnya adalah Size 11T, Used 12G, tidak 78Gsesuai dengan contoh Anda. xfsdumpmenghasilkan file 21KB ... ;-)
frostschutz
2
Ah, saya perhatikan Anda memiliki reflink=1tetapi default untuk saya adalah reflink=0. Dengan reflink=1, katanya juga 78Gdigunakan untuk saya, jadi saya bisa mereproduksinya sekarang.
frostschutz
Jadi sepertinya ini adalah desain, tetapi jika Anda yakin reflink tidak akan melakukan apa pun untuk kasus penggunaan Anda, Anda dapat mempertimbangkan untuk mematikannya.
frostschutz
Saya tidak tahu Satu-satunya hal di sini adalah file qcow2 untuk mesin virtual.
yakatz
Sepertinya beberapa alat libvirt mendukung reflink, tetapi kemungkinan tidak sepadan dengan masalahnya: stackoverflow.com/a/41968000/597234 Saya mungkin dapat memasukkan VM tambahan secara keseluruhan di ruang yang dihemat.
yakatz

Jawaban:

2

Untuk XFS, sistem file kosong "Size Used" seperti yang ditunjukkan oleh df -htampaknya sangat tergantung pada fitur metadata yang Anda aktifkan saat mkfs.xfsitu.

Menguji dengan file 12TB kosong:

# truncate -s 12TB xfstest.img

Pengaturan default (pada sistem ArchLinux saya saat ini):

# mkfs.xfs xfstest.img 
meta-data=xfstest.img            isize=512    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=2929687500, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# mount -o loop xfstest.img loop/
# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   12G   11T   1% /dev/shm/loop
# umount loop/

Menggunakan reflink=1:

# mkfs.xfs -m reflink=1 -f xfstest.img
meta-data=xfstest.img            isize=512    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=2929687500, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# mount -o loop xfstest.img loop/
# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   78G   11T   1% /dev/shm/loop

Menggunakan crc=0, reflink=0: (untuk beberapa alasan, yang juga ternyata finobt=0, sparse=0)

# mkfs.xfs -m reflink=0 -m crc=0 -f xfstest.img 
meta-data=xfstest.img            isize=256    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0, sparse=0, rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=2929687500, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# mount -o loop xfstest.img loop/
# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   33M   11T   1% /dev/shm/loop

Pendeknya:

# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   78G   11T   1% /dev/shm/loop (reflink=1, crc=1)
/dev/loop0       11T   12G   11T   1% /dev/shm/loop (reflink=0, crc=1)
/dev/loop0       11T   33M   11T   1% /dev/shm/loop (reflink=0, crc=0)

Jadi ruang "Bekas" pada sistem file 12TB yang baru adalah 78G, 12G atau serendah 33M tergantung pada fitur metadata yang Anda aktifkan pada waktu mkfs.

frostschutz
sumber
RedHat 8 reflinks=1secara default
yakatz
24

Semua sistem file memiliki overhead untuk struktur data internal mereka sendiri. Informasi internal ini digunakan untuk sistem file untuk membuat file dan direktori di masa depan, dan untuk melacak di mana semuanya dialokasikan. Data ini secara kolektif dikenal sebagai "metadata". Ini data "tentang" data pada sistem file. Metadata dianggap sebagai overhead, karena membutuhkan ruang tetapi bukan data pengguna. Overhead ini adalah efek samping yang tidak dapat dihindari dari penggunaan sistem file apa pun.

Menurut posting blog ini , XFS memiliki overhead sekitar 0,5% dari total ruang disk. (Perhatikan bahwa pos ini berasal dari 2009, tetapi tidak ada alasan ini seharusnya berubah secara drastis). Dia mendapatkan hasil itu dengan menguji overhead filesystem lebih dari selusin filesystem berbeda menggunakan guestfish.

0,5% dari ruang 12TB Anda adalah 60GB, jadi sepertinya cukup dekat dengan penggunaan yang diharapkan. Saya menduga jumlahnya seharusnya sedikit lebih tinggi dari 0,5%, tetapi itu dibulatkan.

Moshe Katz
sumber
9
Perlu dicatat bahwa beberapa sistem file melaporkan ukuran penuh yang dialokasikan dan kemudian membebankan biaya pembukuan terhadap ruang yang digunakan, sementara yang lain mengurangi pembukuan dari ukuran penuh dan hanya melaporkan ruang file sebagai "digunakan".
chrylis -on strike-
3
Overhead Filesystem ... membuat orang bertanya mengapa hard drive mereka tidak melaporkan apa yang ada di stiker itu sejak tahun 1983.
J ...
3
@ J ... Sebenarnya, hard drive sering memasarkan ukuran di sana menggunakan 1GB = 1000MB, bukan 1024MB. Jadi HD yang dipasarkan pada 512GB sebenarnya 12GB lebih kecil dari ukuran yang tercantum. Itu menjadi lebih buruk dengan TB karena mereka menggunakan 1TB = 1000 GB = 1000 * 1000 MB. HD 1TB benar-benar 976GB, bukan 1024GB. 48GB rejan hilang karena TB.
Justin Lessard
4
Perbedaan dalam mengukur gigabyte (basis 10) vs gibibytes (basis 2) tidak muncul sebagai ruang yang digunakan di df.
yakatz
1
@JustinLessard Anda lupa tentang overhead di tingkat MiB dan KiB. Hard drive 512 GB sebenarnya lebih dari 32 GiB lebih kecil dari drive 512 GiB asli. Dan untuk itu, drive 1 TB benar-benar lebih seperti 0,909 TiB ketika menghitung overhead TiB, GiB, MiB, dan KiB. (1 * 1000 ^ 4/1024 ^ 4) = 0.90949
penguin359