"find" problem
JB
jb.1234abcd at gmail.com
Sat Jan 7 18:48:53 UTC 2012
Dean S. Messing <deanm <at> sharplabs.com> writes:
>
> On my F13 machine,
>
> find / \! -fstype ext4 -prune -o -print
>
> prints every file that is in an ext4 filesystem mounted on /, and prunes
> those in any other type of fs.
>
> On my F15 the same command prints nothing. Why might that be?
>
I have a hunch regarding this problem.
It may be related to systemd and /etc/mtab.
Up to F14 (the system I have in front of me; /dev/sda2 is "/"):
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 8062384 4070156 3910344 52% /
...
$ ls -l /etc/mtab
-rw-r--r-- 1 root root 242 Jan 7 11:20 /etc/mtab
$ cat /etc/mtab
/dev/sda2 / ext4 rw 0 0
...
$ mount
/dev/sda2 on / type ext4 (rw)
...
$ ls -al /proc/mounts
lrwxrwxrwx 1 root root 11 Jan 7 19:00 /proc/mounts -> self/mounts
$ cat /proc/self/mounts
rootfs / rootfs rw 0 0
/dev/sda2 / ext4 rw,relatime,barrier=1,data=ordered 0 0
...
Since systemd implementation on F15 and onward /etc/mtab is symlinked to
/proc/self/mounts (the other system I have in front of me is F16; /dev/sda8 is
is "/"):
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 15116288 3590644 11372116 24% /
/dev/sda8 15116288 3590644 11372116 24% /
...
$ ls -al /etc/mtab
lrwxrwxrwx 1 root root 12 Dec 4 12:26 /etc/mtab -> /proc/mounts
$ cat /etc/mtab
rootfs / rootfs rw 0 0
/dev/sda8 / ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0
...
NOTE: the difference between /proc/mounts above and mount outputs.
$ mount
/dev/sda8 on / type ext4 (rw,relatime,user_xattr,barrier=1,data=ordered)
...
$ ls -al /proc/mounts
lrwxrwxrwx 1 root root 11 Jan 7 19:19 /proc/mounts -> self/mounts
NOTE:
systemd requires that /etc/mtab be a symlink to /proc/self/mounts, or
the following warning will be printed:
/etc/mtab is not a symlink or not pointing to /proc/self/mounts. This is not
supported anymore. Please make sure to replace this file by a symlink to avoid
incorrect or misleading mount(8) output.
# ln -fs /proc/self/mounts /etc/mtab
Without doing this, features such as automounting through /etc/fstab will be
unavailable.
One more hint (formally unrelated as your "find" does not use Olevel);
on F14 and F16 (no difference):
$ man find
-P ...
-L ...
-H ...
...
2 Any -type or -xtype tests are performed after any tests
based only on the names of files, but before any tests
that require information from the inode. On many modern
versions of Unix, file types are returned by readdir()
and so these predicates are faster to evaluate than pred‐
icates which need to stat the file first. If you use the
-fstype FOO predicate and specify a filsystem type FOO
which is not known (that is, present in `/etc/mtab') at
the time find starts, that predicate is equivalent to
-false.
Did the /etc/mtab being a symlink or that pecularity with optimization created
code execution conditions that make "find" behave differently ?
Some more ouput.
On F14:
# find / \! -fstype ext4 -print -prune
/var/lib/nfs/rpc_pipefs
/dev
/sys
/proc
# find / \! -fstype ext4 -prune -o -print
/
/.pulse
/.pulse/dd64759292eef8babdfc0cd400000013-runtime
/selinux
/selinux/booleans
/media
/media/.hal-mtab
/.autofsck
/usr
/usr/local
/usr/local/lib
...
On F16:
# find / \! -fstype ext4 -print -prune
/
# find / \! -fstype ext4 -prune -o -print
#
I am not able to put a finger on it yet; you may have more luck.
JB
More information about the users
mailing list