[gelöst] prüfen ob zwei Dateien auf demselben Dateisystem liegen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

[gelöst] prüfen ob zwei Dateien auf demselben Dateisystem liegen

Beitrag von smutbert » 27.05.2018 19:55:45

Hallo liebe Freunde meines Lieblingsbetriebssystems,

der Titel sagt eh schon fast alles.
Ich möchte in einem Shellskript prüfen ob zwei Dateien oder Verzeichnisse auf demselben Dateisystem liegen und mein bisheriger Ansatz mit stat

Code: Alles auswählen

test $(stat -c "%d" "${Datei1}") = $(stat -c "%d" "${Datei2}")
bringt mich bei btrfs kein Stückchen weiter, weil jedes Subvolume eine eigene fake Device number bekommt und statt mit %m die Wurzel des Subvolumes statt des Mountpoints liefert.
Bei den diversen btrfs-spezifischen Kommandos finde ich auch nichts was mir die zugehörige Gerätedatei (oder den Mountpoint) ausgibt.

Hilfe?

lg smutbert
Zuletzt geändert von smutbert am 29.05.2018 12:26:21, insgesamt 2-mal geändert.

schwedenmann
Beiträge: 5614
Registriert: 30.12.2004 15:31:07
Wohnort: Wegberg

Re: prüfen ob zwei Dateien auf demselben Dateisystem liegen

Beitrag von schwedenmann » 27.05.2018 20:33:14

Hallo


Würde dir denn nicht stat -.f helfen ?

https://wiki.ubuntuusers.de/stat/

untere Häfte des Artikels

mfg
schwedenmann

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: prüfen ob zwei Dateien auf demselben Dateisystem liegen

Beitrag von smutbert » 27.05.2018 20:48:30

glaube nicht, sieht bei mir bei einem Subvolume und einem normalen Verzeichnis auf ein- und demselben Dateisystem so aus

Code: Alles auswählen

# stat -f newdata/music   
  File: "newdata/music"
    ID: cfdd8e481ca46cb1 Namelen: 255     Type: btrfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 125026641  Free: 59351506   Available: 58970473
Inodes: Total: 0          Free: 0

# stat -f snapshots
  File: "snapshots"
    ID: cfdd8e481ca46ea6 Namelen: 255     Type: btrfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 125026641  Free: 59351506   Available: 58970473
Inodes: Total: 0          Free: 0
eventuell ließe sich der zweifelsohne nicht zufällig übereinstimmende erste Teil der ID nutzen, aber ich wüsste nicht wie und ob es einen bei einem Dateisystem einen verlässlich übereinstimmenden Teil fixer Länge gibt.

schwedenmann
Beiträge: 5614
Registriert: 30.12.2004 15:31:07
Wohnort: Wegberg

Re: prüfen ob zwei Dateien auf demselben Dateisystem liegen

Beitrag von schwedenmann » 27.05.2018 20:56:55

Hallo


Liegen die Dateien alle auf btrfs oder ev. auch auf anderen FS ?

mfg
schwedenmann

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: prüfen ob zwei Dateien auf demselben Dateisystem liegen

Beitrag von smutbert » 27.05.2018 21:12:38

Du meinst allgemein? Gehen wir einmal davon aus, dass sich immer um btrfs handelt.

(Genau genommen, weiß ich bis jetzt zum Zeitpunkt der Prüfung erst von einer der beiden Dateien, die nämlich immer ein btrfs-subvolume ist, dass sie auf einem btrfs liegt, aber das ließe sich bei der zweiten Datei ja leicht prüfen.)

schwedenmann
Beiträge: 5614
Registriert: 30.12.2004 15:31:07
Wohnort: Wegberg

Re: prüfen ob zwei Dateien auf demselben Dateisystem liegen

Beitrag von schwedenmann » 27.05.2018 21:28:17

Hallo


Blöde Frage von, sorry, aber wenn ich stat -f oder auch stat -c bei mir mit dem dateinamen eingebe (ohne Pfad) erhalte ich nichts. Erts wenn ich den Pfad angebe
bekomme ich eine Ausgabe per stat.

Dann hast du aber doch im Pfad den mountpoint, bzw. man sollte ihn dann über die btrfs-Kommandos rausfinden können.

Odfer liege ich da komplett falsch :cry:

mfg
schwedenmann

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: prüfen ob zwei Dateien auf demselben Dateisystem liegen

Beitrag von smutbert » 27.05.2018 21:51:41

Mit dem Herausfinden des Mountpoints wäre ich schon vollständig zufrieden, nur liefern mir die Tools immer nur das blöde subvolume:

Code: Alles auswählen

$ mount | grep /mnt/tmp
/dev/sdc1 on /mnt/tmp type btrfs (rw,relatime,ssd,space_cache,subvolid=5,subvol=/)
und der Versuch den Mountpoint »/mnt/tmp« herauszubekommen

Code: Alles auswählen

$ stat -c "%m" /mnt/tmp/newdata/music
/mnt/tmp/newdata/music
oder der Versuch eine Vergleichbare Dateisystem-ID oder etwas ähnliches zu erhalten

Code: Alles auswählen

# btrfs inspect-internal rootid /mnt/tmp/newdata/music
530
# btrfs inspect-internal rootid /mnt/tmp              
5
ich denke ich habe noch ein paar andere Varianten mit btrfs und stat (und df) durchprobiert, aber sie führen entweder z gar nichts oder enden mit Ausgaben, die sich für ein- und dasselbe Dateisystem unterscheiden.

Wenn »/mnt/tmp/newdata/music« kein subvolume wäre, würde es ja funktionieren, sowohl mit stat wie auch den btrfs-tools. Bei stat erhalte ich bei normalen Dateien/Verzeichnissen wie gewünscht den korrekten Mountpoint

Code: Alles auswählen

$ stat -c "%m" /mnt/tmp/newdata                     
/mnt/tmp

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: prüfen ob zwei Dateien auf demselben Dateisystem liegen

Beitrag von smutbert » 29.05.2018 12:26:10

Danke für deine Ideen Schwedenmann. Ich habe wohl den Wald vor lauter Bäumen nicht gesehen. Es gibt ein Kommando, das mir problemlos Mountpoint, Gerätedatei oder auch die UUID, die für meine Zwecke optimal ist, liefert:

Code: Alles auswählen

findmnt -n -o UUID -T /mnt/tmp/newdata/music

Antworten