Subject: | Support for modern filesystems |
Hello,
Filesys::DiskSpace does not recognize any modern filesystem (e.g.
ReiserFS and Ext3 on Linux), since "known FS type" list has not been
updated since 1999 and heavily outdated. I added more filesystem types
from my statfs(2) linux manpage, and made a change to t/linux-ext2.t so
that it can also recognize ext3, reiserfs, and xfs (arguably the most
popular linux filesystems nowadays). Please see the attached patch.
BTW, I think I am interested in taking maintainership over
Filesys::DiskSpace on CPAN.
--
Alexey Tourbin
ALT Linux Team
--- ./t/linux-ext2.t- 1999-09-06 02:41:41 +0400
+++ ./t/linux-ext2.t 2003-10-24 19:44:27 +0400
@@ -16,11 +16,11 @@
my $bindf = '/bin/df';
my $mnttab = '/etc/mtab';
-my ($data, $dirs);
+my $data; my $dirs = [];
open (MOUNT, $mnttab) || die "Error: $!\n";
while (defined (my $d = <MOUNT>)) {
my @tab = split /\s+/, $d;
- push @$dirs, $tab[1] if $tab[2] eq 'ext2';
+ push @$dirs, $tab[1] if $tab[2] =~ /^(ext[23]|reiserfs|xfs)$/;
}
close MOUNT;
open (DF, "$bindf -k @$dirs |") || die "Error: $!\n";
@@ -44,7 +44,7 @@
for my $part (keys %$data) {
my ($fs_type, $fs_desc, $used, $avail, $fused, $favail) = df $part;
- my $res = $fs_type == 61267 &&
+ my $res = # $fs_type == 61267 &&
$$data{$part}{'used'} == $used &&
$$data{$part}{'avail'} == $avail &&
$$data{$part}{'fused'} == $fused &&
--- ./lib/Filesys/DiskSpace.pm- 1999-09-06 02:41:22 +0400
+++ ./lib/Filesys/DiskSpace.pm 2003-10-24 19:43:10 +0400
@@ -39,6 +39,52 @@
19920822 => "SYSV2_SUPER_MAGIC", # 0x012FF7B6
19920823 => "COH_SUPER_MAGIC", # 0x012FF7B7
4187351113 => "HPFS_SUPER_MAGIC", # 0xF995E849
+
+# updated by Alexey Tourbin <at@altlinux.org> according to statfs(2) on Fri Oct 24 2003
+ 0xadf5, "ADFS_SUPER_MAGIC",
+ 0xADFF, "AFFS_SUPER_MAGIC",
+ 0x42465331, "BEFS_SUPER_MAGIC",
+ 0x1BADFACE, "BFS_MAGIC",
+ 0xFF534D42, "CIFS_MAGIC_NUMBER",
+ 0x73757245, "CODA_SUPER_MAGIC",
+ 0x012FF7B7, "COH_SUPER_MAGIC",
+ 0x28cd3d45, "CRAMFS_MAGIC",
+ 0x1373, "DEVFS_SUPER_MAGIC",
+ 0x00414A53, "EFS_SUPER_MAGIC",
+ 0x137D, "EXT_SUPER_MAGIC",
+ 0xEF51, "EXT2_OLD_SUPER_MAGIC",
+ 0xEF53, "EXT2_SUPER_MAGIC",
+ 0xEF53, "EXT3_SUPER_MAGIC",
+ 0x4244, "HFS_SUPER_MAGIC",
+ 0xF995E849, "HPFS_SUPER_MAGIC",
+ 0x958458f6, "HUGETLBFS_MAGIC",
+ 0x9660, "ISOFS_SUPER_MAGIC",
+ 0x72b6, "JFFS2_SUPER_MAGIC",
+ 0x3153464a, "JFS_SUPER_MAGIC",
+ 0x137F, "MINIX_SUPER_MAGIC", # /* orig. minix */
+ 0x138F, "MINIX_SUPER_MAGIC2", # /* 30 char minix */
+ 0x2468, "MINIX2_SUPER_MAGIC", # /* minix V2 */
+ 0x2478, "MINIX2_SUPER_MAGIC2", # /* minix V2, 30 char names */
+ 0x4d44, "MSDOS_SUPER_MAGIC",
+ 0x564c, "NCP_SUPER_MAGIC",
+ 0x6969, "NFS_SUPER_MAGIC",
+ 0x5346544e, "NTFS_SB_MAGIC",
+ 0x9fa1, "OPENPROM_SUPER_MAGIC",
+ 0x9fa0, "PROC_SUPER_MAGIC",
+ 0x002f, "QNX4_SUPER_MAGIC",
+ 0x52654973, "REISERFS_SUPER_MAGIC",
+ 0x7275, "ROMFS_MAGIC",
+ 0x517B, "SMB_SUPER_MAGIC",
+ 0x012FF7B6, "SYSV2_SUPER_MAGIC",
+ 0x012FF7B5, "SYSV4_SUPER_MAGIC",
+ 0x01021994, "TMPFS_MAGIC",
+ 0x15013346, "UDF_SUPER_MAGIC",
+ 0x00011954, "UFS_MAGIC",
+ 0x9fa2, "USBDEVICE_SUPER_MAGIC",
+ 0xa501FCF5, "VXFS_SUPER_MAGIC",
+ 0x012FF7B4, "XENIX_SUPER_MAGIC",
+ 0x58465342, "XFS_SUPER_MAGIC",
+ 0x012FD16D, "_XIAFS_SUPER_MAGIC",
);
sub df ($) {