Wie kann eigentlich *sicher3 (und möglichst "einfach") herausgefunden
werden, auf welchem Dateisystem sich ein gegebenes Verzeichnis befindet?
Zur Zeit verwende ich dafür "df". Z.B. so:
$ cd $dir
$ df .
Problem: U.U. kann der akt. non-root User nicht nach $dir gehen.
Z.B. bei MySQL klappt das nicht, um mal ein bekanntes Beispiel zu nennen:
$ ls -lad `mysql --user=SuperUser --batch -s -e "show variables like 'datadir';" --password | cut -f 2`
drwx------ 8 mysql mysql 64 Sep 26 07:48 /data/mysql/
Als "normaler" User (also als non-root und non-mysql) ausgeführt, wird
das "cd" fehlschlagen. Die Rechte anzupassen ist keine Lösung, da mich
eine allgemeingültige Lösung interessiert.
Und einfach nur die Ausgabe von mount bzw. df zu "parsen" ist auch nicht
so zielführend, da es ja durchaus sein könnte, dass ein "Verzeichnis"
in Wahrheit ein Symlink auf das richtige Verzeichnis ist. Z.B.:
$ ls -la /opt/csw/mysql4/var
lrwxrwxrwx 1 root root 11 Sep 19 13:23 /opt/csw/mysql4/var -> /data/mysql
Wenn ich also wissen wollte, auf welchem Dateisystem sich
/opt/csw/mysql4/var befindet, dann ist die richtige Antwort davon
abhängig, wie man die Frage versteht :) /opt/csw/mysql4/var ist
natürlich da, wo /opt/csw/mysql4 ist. Aber falls einen interessiert
wo /opt/csw/mysql4/var/. ist, dann helfe ich mir mit dem o.g. "cd $dir
&& df ." "workaround".
Wie macht ihr das? Wie findet ihr heraus, auf welchem Dateisystem sich
der Inhalt eines Verzeichnisses befindet?
Michael
Du meintest am 30.09.08:
> Wie kann eigentlich *sicher3 (und möglichst "einfach") herausgefunden
> werden, auf welchem Dateisystem sich ein gegebenes Verzeichnis
> befindet?
df -T /Pfad/zu/Verzeichnis
Hilft aber nicht bei symbolischen Links. Da wäre "test -L /Pfad/zu/
Verzeichnis" besser.
Viele Gruesse
Helmut
"Ubuntu" - an African word, meaning "Slackware is too hard for me".
> Hallo, Michael,
>
> Du meintest am 30.09.08:
>
>> Wie kann eigentlich *sicher3 (und möglichst "einfach") herausgefunden
>> werden, auf welchem Dateisystem sich ein gegebenes Verzeichnis
>> befindet?
>
> df -T /Pfad/zu/Verzeichnis
"-T" gibt's nur bei Gnu. Aber egal, hatte ich ja nicht explizit
ausgeschlossen.
> Hilft aber nicht bei symbolischen Links.
Was meinst Du damit?
--($ ~)-- /bin/df /opt/csw/mysql4/var
/data/mysql (data/mysql ):349831848 Blöcke 349831848 Dateien
Klappt wunderprächtig :)
Danke sehr,
Michael
> Hallo, Michael,
>
> Du meintest am 30.09.08:
>
>> Wie kann eigentlich *sicher3 (und möglichst "einfach") herausgefunden
>> werden, auf welchem Dateisystem sich ein gegebenes Verzeichnis
>> befindet?
>
> df -T /Pfad/zu/Verzeichnis
"-T" gibt's nur bei Gnu. Aber egal, hatte ich ja nicht explizit
ausgeschlossen.
> Hilft aber nicht bei symbolischen Links.
Was meinst Du damit?
--($ ~)-- /bin/df /opt/csw/mysql4/var
/data/mysql (data/mysql ):349831848 Blöcke 349831848 Dateien
--($ ~)-- /opt/csw/bin/gdf /opt/csw/mysql4/var
Filesystem 1k-blocks Used Available Use% Mounted on
data/mysql 175026708 122394 174904314 1% /data/mysql
> --($ ~)-- /bin/df /opt/csw/mysql4/var
> /data/mysql (data/mysql ):349831848 Blöcke 349831848 Dateien
>
> --($ ~)-- /opt/csw/bin/gdf /opt/csw/mysql4/var
> Filesystem 1k-blocks Used Available Use% Mounted on
> data/mysql 175026708 122394 174904314 1% /data/mysql
>
> Klappt wunderprächtig :)
Oder auch nicht :(
Auf Solaris 10 habe ich einen LOFS / Loopback Mount von
/u02/.zfs/snapshot/backup.global nach /.backup/snapshots/u02. Dh.
wenn ich nach /.backup/snapshots/u02 gehe, bin ich in echt in /u02/...;
das, was man auf Linux mit "mount --bind" erreichen würde. Auf Solaris
erzeugt durch:
# mount -F lofs /u02/.zfs/snapshot/backup.global /.backup/snapshots/u02
Nun würde ich gerne wissen, auf welchem Dateisystem sich das Verzeichnis
/.backup/snapshots/u02/apps befindet. Und bitte auch für non-Gnu :)
--($ /.backup/snapshots/u02/apps)-- gdf /.backup/snapshots/u02/apps
Filesystem 1k-blocks Used Available Use% Mounted on
/u02/.zfs/snapshot/backup.global
183902952 9007003 174895949 5% /.backup/snapshots/u02
Mit GNU df ("gdf") klappt's.
ABER nicht mit Solaris 10 Bordmitteln:
--($ /.backup/snapshots/u02/apps)-- /bin/df /.backup/snapshots/u02/apps
df: Einhängepunkt für /.backup/snapshots/u02/apps wurde nicht gefunden
--($ /.backup/snapshots/u02/apps)-- /usr/ucb/df /.backup/snapshots/u02/apps
df: Einhängepunkt für /.backup/snapshots/u02/apps wurde nicht gefunden
Der "cd $dir && df ." Workaround klappt auch nicht :(
--($ /.backup/snapshots/u02/apps)-- cd /.backup/snapshots/u02/apps && /usr/ucb/df .
df: Einhängepunkt für . wurde nicht gefunden
--($ /.backup/snapshots/u02/apps)-- cd /.backup/snapshots/u02/apps && /bin/df .
df: Einhängepunkt für . wurde nicht gefunden
Mift :(
Bliebe einem auf einem nicht-Gnu System nichts anderes übrig als die
Ausgabe von "mount" zu "parsen"?
Gruß,
Michael
Pack doch das hier
> $ cd $dir
> $ df .
in ein Script, das dann von allen (relevanten) Usern per sudo
gestartet werden kann. Das vermeidet dann wirksam...
> Problem: U.U. kann der akt. non-root User nicht nach $dir gehen.
...dieses Problem.
CU
Hauke
--
http://www.hauke-laging.de/ideen/
Wie können 59.054.087 Leute nur so dumm sein?
> Michael Schmarck schrieb am Dienstag 30 September 2008 09:14:
>
> Pack doch das hier
>
>> $ cd $dir
>> $ df .
>
> in ein Script, das dann von allen (relevanten) Usern per sudo
> gestartet werden kann. Das vermeidet dann wirksam...
>
>
>> Problem: U.U. kann der akt. non-root User nicht nach $dir gehen.
>
> ...dieses Problem.
Aber nicht das in <news:6ke8khF...@mid.individual.net> angesprochene
Problem :)
Michael
> Bliebe einem auf einem nicht-Gnu System nichts anderes übrig als
> die Ausgabe von "mount" zu "parsen"?
Gibt es bei Dir das Programm stat?
> Michael Schmarck schrieb am Dienstag 30 September 2008 11:09:
>
>> Bliebe einem auf einem nicht-Gnu System nichts anderes übrig als
>> die Ausgabe von "mount" zu "parsen"?
>
> Gibt es bei Dir das Programm stat?
--($ ~)-- stat
-bash: stat: command not found
Nö, gibt's nicht.
Michael
http://www.sunfreeware.com/programlistsparc10.html#coreutils
HTH, Helmut
--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
In der Shell: df.
> Zur Zeit verwende ich dafür "df". Z.B. so:
>
> $ cd $dir
> $ df .
Genauso.
> Problem: U.U. kann der akt. non-root User nicht nach $dir gehen.
> Z.B. bei MySQL klappt das nicht, um mal ein bekanntes Beispiel zu nennen:
>
> $ ls -lad `mysql --user=SuperUser --batch -s -e "show variables like 'datadir';" --password | cut -f 2`
> drwx------ 8 mysql mysql 64 Sep 26 07:48 /data/mysql/
>
> Als "normaler" User (also als non-root und non-mysql) ausgeführt, wird
> das "cd" fehlschlagen. Die Rechte anzupassen ist keine Lösung, da mich
> eine allgemeingültige Lösung interessiert.
Wenn du nicht auf das Ziel zugreifen kannst, kannst du *gar* *nicht*
ermitteln, auf welchem Dateisystem es sich letztlich befindet.
> Und einfach nur die Ausgabe von mount bzw. df zu "parsen" ist auch nicht
> so zielführend, da es ja durchaus sein könnte, dass ein "Verzeichnis"
> in Wahrheit ein Symlink auf das richtige Verzeichnis ist. Z.B.:
Genau deswegen.
> $ ls -la /opt/csw/mysql4/var
> lrwxrwxrwx 1 root root 11 Sep 19 13:23 /opt/csw/mysql4/var -> /data/mysql
>
> Wenn ich also wissen wollte, auf welchem Dateisystem sich
> /opt/csw/mysql4/var befindet, dann ist die richtige Antwort davon
> abhängig, wie man die Frage versteht :) /opt/csw/mysql4/var ist
> natürlich da, wo /opt/csw/mysql4 ist. Aber falls einen interessiert
> wo /opt/csw/mysql4/var/. ist, dann helfe ich mir mit dem o.g. "cd $dir
> && df ." "workaround".
>
> Wie macht ihr das? Wie findet ihr heraus, auf welchem Dateisystem sich
> der Inhalt eines Verzeichnisses befindet?
Gib dem Task, der das df ausfuehrt (muss vorher kein cd machen, du
kannst auch sagen "df /opt/csw/mysql4/var" ).
Fuer die noetigen Rechte empfiehlt sich sudo, damit kannst du das
granular auf nur den df-aufruf einschraenken.
Juergen
--
Juergen P. Meier - "This World is about to be Destroyed!"
end
If you think technology can solve your problems you don't understand
technology and you don't understand your problems. (Bruce Schneier)
> Michael Schmarck <usenet-...@schmarck.cn>:
>> Hallo!
>>
>> Wie kann eigentlich *sicher3 (und möglichst "einfach") herausgefunden
>> werden, auf welchem Dateisystem sich ein gegebenes Verzeichnis befindet?
>
> In der Shell: df.
Dachte ich auch - aber: "Denkste!" :)
>> Zur Zeit verwende ich dafür "df". Z.B. so:
>>
>> $ cd $dir
>> $ df .
>
> Genauso.
Nein. Siehe <news:6ke8khF...@mid.individual.net>.
>> Problem: U.U. kann der akt. non-root User nicht nach $dir gehen.
>> Z.B. bei MySQL klappt das nicht, um mal ein bekanntes Beispiel zu nennen:
>>
>> $ ls -lad `mysql --user=SuperUser --batch -s -e "show variables like
>> 'datadir';" --password | cut -f 2`
>> drwx------ 8 mysql mysql 64 Sep 26 07:48 /data/mysql/
>>
>> Als "normaler" User (also als non-root und non-mysql) ausgeführt, wird
>> das "cd" fehlschlagen. Die Rechte anzupassen ist keine Lösung, da mich
>> eine allgemeingültige Lösung interessiert.
>
> Wenn du nicht auf das Ziel zugreifen kannst, kannst du *gar* *nicht*
> ermitteln, auf welchem Dateisystem es sich letztlich befindet.
Doch :) Siehe <news:6ke74sF...@mid.individual.net>.
> Fuer die noetigen Rechte empfiehlt sich sudo, damit kannst du das
> granular auf nur den df-aufruf einschraenken.
Nur das df eben leider nicht funktioniert... :/ Genauer: Es funktioniert
nur mit GNU df. Eine generelle Lösung wäre aber schon interessant.
Was anderes als "mount clever parsen" fällt mir aber nicht ein. Und
eben dieses parsen mag beliebig komplex werden, wenn ein
"kreativer" Einsatz von symlinks zum Zuge kommt.
Michael
> Michael Schmarck <usenet-...@schmarck.cn> wrote:
>> Hauke Laging <3q2...@hauke-laging.de> wrote:
>>
>>> Michael Schmarck schrieb am Dienstag 30 September 2008 11:09:
>>>
>>>> Bliebe einem auf einem nicht-Gnu System nichts anderes übrig als
>>>> die Ausgabe von "mount" zu "parsen"?
>>>
>>> Gibt es bei Dir das Programm stat?
>>
>> --($ ~)-- stat
>> -bash: stat: command not found
>>
>> Nö, gibt's nicht.
>
> http://www.sunfreeware.com/programlistsparc10.html#coreutils
Nuja. Dann kann ich auch direkt die fileutils (zu denen gehört ja GNU df)
installieren. Wie gesagt, ich habe von einem "nicht-Gnu System"
gesprochen - wenn die coreutils oder fileutils installiert sind, dann
kann man IMO kaum noch von einem "nicht-Gnu System" sprechen, oder? :)
Drücken wir es mal "gruppenkonform" aus: Eine portable Lösung ist
gefragt ;-)
Michael
Dann nimm dir mal das x bit von /var/mysql/ weg, dann geht das nicht
mehr :P
>> Fuer die noetigen Rechte empfiehlt sich sudo, damit kannst du das
>> granular auf nur den df-aufruf einschraenken.
>
> Nur das df eben leider nicht funktioniert... :/ Genauer: Es funktioniert
> nur mit GNU df. Eine generelle Lᅵsung wᅵre aber schon interessant.
Auch Solaris df zeigt dir das Filesystem an. Mit der passenden Option
sogar im BSD-Style (filesystem zuerst) zum einfachen Parsen.
> Was anderes als "mount clever parsen" fᅵllt mir aber nicht ein. Und
> eben dieses parsen mag beliebig komplex werden, wenn ein
> "kreativer" Einsatz von symlinks zum Zuge kommt.
Beispiel: (in bla befindet sich der gleiche Symlink wie in /tmp/foo)
0:jor@dreadnought:/tmp/foo$ ls -al
total 64
drwxr-xr-x 3 jor bofh 237 Oct 2 05:44 .
drwxrwxrwt 3 root sys 501 Oct 2 05:43 ..
lrwxrwxrwx 1 jor bofh 8 Oct 2 05:43 bar -> /var/tmp
drwx------ 2 root bofh 177 Oct 2 05:44 bla
0:jor@dreadnought:/tmp/foo$ df -k .
Filesystem kbytes used avail capacity Mounted on
swap 1472576 8 1472568 1% /tmp
0:jor@dreadnought:/tmp/foo$ df -k bar
Filesystem kbytes used avail capacity Mounted on
/dev/md/dsk/d1 3115799 2209723 843761 73% /
0:jor@dreadnought:/tmp/foo$ df -k bla/bar
df: (bla/bar ) not a block device, directory or mounted resource
1:jor@dreadnought:/tmp/foo$ uname -a
SunOS dreadnought 5.8 Generic_117350-47 sun4u sparc SUNW,Ultra-4
Die Fehlermeldung im Fall von EPERM bei df von Solaris 8 ist halt
falsch. Aber hier gibts keinen Unterschied zwischen df von Solrais
und GNU-df.
>> Gibt es bei Dir das Programm stat?
>
> --($ ~)-- stat
> -bash: stat: command not found
>
> Nö, gibt's nicht.
Hm, hast Du Zugriff auf Perl oder Python?
perl -e '@l=stat($ARGV[0]); print $l[0]."\n"' $DIRNAME
bzw.
python -c 'import sys,os; print os.stat(sys.argv[1]).st_dev' $DIRNAME
gibt jeweils die Gerätenummer aus, auf der das Dateisystem residiert.
HTH,
Thomas
> Michael Schmarck <usenet-...@schmarck.cn>:
>>> Wenn du nicht auf das Ziel zugreifen kannst, kannst du *gar* *nicht*
>>> ermitteln, auf welchem Dateisystem es sich letztlich befindet.
>>
>> Doch :) Siehe <news:6ke74sF...@mid.individual.net>.
>
> Dann nimm dir mal das x bit von /var/mysql/ weg, dann geht das nicht
> mehr :P
Stimmt. :)
>>> Fuer die noetigen Rechte empfiehlt sich sudo, damit kannst du das
>>> granular auf nur den df-aufruf einschraenken.
>>
>> Nur das df eben leider nicht funktioniert... :/ Genauer: Es funktioniert
>> nur mit GNU df. Eine generelle Lösung wäre aber schon interessant.
>
> Auch Solaris df zeigt dir das Filesystem an.
Wieso sagst Du sowas, wenn ich schon das Gegenteil gezeigt habe?
<news:6ke8khF...@mid.individual.net>
| # mount -F lofs /u02/.zfs/snapshot/backup.global /.backup/snapshots/u02
|
| Nun würde ich gerne wissen, auf welchem Dateisystem sich das Verzeichnis
| /.backup/snapshots/u02/apps befindet. Und bitte auch für non-Gnu :)
|
| --($ /.backup/snapshots/u02/apps)-- gdf /.backup/snapshots/u02/apps
| Filesystem 1k-blocks Used Available Use% Mounted on
| /u02/.zfs/snapshot/backup.global
| 183902952 9007003 174895949 5% /.backup/snapshots/u02
|
| Mit GNU df ("gdf") klappt's.
|
| ABER nicht mit Solaris 10 Bordmitteln:
|
| --($ /.backup/snapshots/u02/apps)-- /bin/df /.backup/snapshots/u02/apps
| df: Einhängepunkt für /.backup/snapshots/u02/apps wurde nicht gefunden
|
| --($ /.backup/snapshots/u02/apps)-- /usr/ucb/df /.backup/snapshots/u02/apps
| df: Einhängepunkt für /.backup/snapshots/u02/apps wurde nicht gefunden
>> Was anderes als "mount clever parsen" fällt mir aber nicht ein. Und
>> eben dieses parsen mag beliebig komplex werden, wenn ein
>> "kreativer" Einsatz von symlinks zum Zuge kommt.
>
> Beispiel: (in bla befindet sich der gleiche Symlink wie in /tmp/foo)
>
> 0:jor@dreadnought:/tmp/foo$ ls -al
> total 64
> drwxr-xr-x 3 jor bofh 237 Oct 2 05:44 .
> drwxrwxrwt 3 root sys 501 Oct 2 05:43 ..
> lrwxrwxrwx 1 jor bofh 8 Oct 2 05:43 bar -> /var/tmp
> drwx------ 2 root bofh 177 Oct 2 05:44 bla
>
> 0:jor@dreadnought:/tmp/foo$ df -k .
> Filesystem kbytes used avail capacity Mounted on
> swap 1472576 8 1472568 1% /tmp
>
> 0:jor@dreadnought:/tmp/foo$ df -k bar
> Filesystem kbytes used avail capacity Mounted on
> /dev/md/dsk/d1 3115799 2209723 843761 73% /
Und? Wolltest Du meine (unvollständige) Aussage aus <news:6ke74sF...@mid.individual.net>
bestätigen? :)
Kennst Du eine Lösung, die nicht auf "mount parsen" herausläuft? Mir
fällt keine ein.
> Die Fehlermeldung im Fall von EPERM bei df von Solaris 8 ist halt
> falsch. Aber hier gibts keinen Unterschied zwischen df von Solrais
> und GNU-df.
Doch, den gibt es. Er ist sogar extrem eklatant, wie ich gezeigt
habe - GNU df zeigt den Mountpunkt an, Solaris nicht (bei LOFS
Mounts).
Michael