• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Gruppe von /dev/nst0 dauerhaft ändern

Hallo,

ich habe das Problem, das ich über den Befehl amrecover (setze Amanda zum Backup ein) keine Dateien vom Bandlaufwerk wiederherstellen kann, da /dev/nst0 root:root gehört.
Ich erhalte nur folgende Fehlermeldung wenn ich Daten vom Band mittels extract wiederherstellen will:
Code:
amrecover> extract
Extracting files using tape drive /dev/nst0 on host localhost.
The following tapes are needed: Backup101

Restoring files into directory /restore
Continue [?/Y/n]? y

Extracting files using tape drive /dev/nst0 on host localhost.
Load tape Backup101 now
Continue [?/Y/n/s/t]? y
Could not rewind device '/dev/nst0': tape_rewind: tape open: /dev/nst0: Permission denied

Bei dem Bandlaufwerk selbst handelt es sich um ein IBM LTO4 Ultrium mit Firmware Version 89B2.

/dev/nst0 hat folgende Berechtigungen:
Code:
server:~ # ls -lach /dev/nst0
crw-rw---- 1 root root 9, 128 Dec 11 13:43 /dev/nst0

Setze ich die Rechte von /dev/nst0 manuell auf root:disk klappt das Wiederherstellen mit amrecover ohne Probleme.
Aber eben nur bis zum nächsten Neustart, weil dann Udev /dev/nst0 wieder dynamisch mit root:root erzeugt..
Code:
server:~ # chown root:disk /dev/nst0
server:~ # ls -lach /dev/nst0
crw-rw---- 1 root disk 9, 128 Dec 11 13:43 /dev/nst0

So, also dachte ich mir, ich passe einfach den GROUP="root" Eintrag der entsprechenden Udev-Regel unter /etc/udev/rules.d/ auf GROUP="disk" an.
Die Regeln für die /dev/nst[0-9] stehen in der Datei 60-persistent-storage-tape.rules.
Diese existiert aber nicht unter /etc/udev/rules.d/!?
Code:
server:~ # ls /etc/udev/rules.d/
55-hpmud.rules    56-idedma.rules                    70-kpartx.rules         70-persistent-net.rules  77-network.rules        81-mptctl.rules
55-libsane.rules  56-sane-backends-autoconfig.rules  70-persistent-cd.rules  71-multipath.rules       79-yast2-drivers.rules  99-pcsc_lite.rules

Unter /lib/udev/rules.d/ liegt die Datei.
Code:
server:~ # ls /lib/udev/rules.d/
40-suse.rules          60-cdrom_id.rules                 60-persistent-storage.rules      64-device-mapper.rules  75-cd-aliases-generator.rules      80-drivers.rules
40-zaptel.rules        60-persistent-input.rules         60-persistent-v4l.rules          64-lvm2.rules           75-persistent-net-generator.rules  90-hal.rules
50-udev-default.rules  60-persistent-storage-tape.rules  61-persistent-storage-edd.rules  64-md-raid.rules        79-fstab_import.rules              95-udev-late.rules

Allerdings steht hier drin:
a) Das man die Datei nicht ändern soll :)
b) Keine Benutzer-/Gruppendefinition.
Ich gehe also davon aus, das /dev/nst0 root:root gehört, weil /dev/ root:root gehört und /dev/nst0 dieses dann einfach erbt.

Inhalt der /lib/udev/rules.d/60-persistent-storage-tape.rules
Code:
# do not edit this file, it will be overwritten on update

# persistent storage links: /dev/tape/{by-id,by-path}

ACTION!="add|change", GOTO="persistent_storage_tape_end"

# type 8 devices are "Medium Changers"
KERNEL=="sg[0-9]*", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $tempnode", SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL}"

SUBSYSTEM!="scsi_tape", GOTO="persistent_storage_tape_end"

KERNEL=="st*[0-9]|nst*[0-9]", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_BUS}="ieee1394"
KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{program}="usb_id --export %p"
KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", ENV{BSG_DEV}="$root/bsg/$id"
KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", WAIT_FOR="$env{BSG_DEV}", IMPORT="scsi_id --whitelisted --export --device=$env{BSG_DEV}", ENV{ID_BUS}="scsi"
KERNEL=="st*[0-9]",  ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
KERNEL=="nst*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst"

# by-path (parent device path)
KERNEL=="st*[0-9]|nst*[0-9]", IMPORT{program}="path_id %p"
KERNEL=="st*[0-9]", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}"
KERNEL=="nst*[0-9]", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}-nst"

LABEL="persistent_storage_tape_end"

Oben in der Datei steht auch noch was von "persistent storage links". Dies sind aber nur Symlinks auf die Gerätedateien und gehören auch root:root.
Code:
server:~ # ls -lach /dev/tape/by-path/
lrwxrwxrwx 1 root root  9 Dec  1 18:49 pci-0000:0d:08.0-sas-phy1:1-0x50050763124596ae:1-lun0-1:0:0:0st -> ../../st0
lrwxrwxrwx 1 root root 10 Dec  1 18:49 pci-0000:0d:08.0-sas-phy1:1-0x50050763124596ae:1-lun0-1:0:0:0st-nst -> ../../nst0
server:~ # ls -lach /dev/tape/by-id/
lrwxrwxrwx 1 root root  9 Dec  1 18:49 scsi-350050763120596ae -> ../../st0
lrwxrwxrwx 1 root root 10 Dec  1 18:49 scsi-350050763120596ae-nst -> ../../nst0

Meine Fragen sind jetzt:
1.) Wieso taucht die Datei 60-persistent-storage-tape.rules zwar unter /lib/udev/rules.d/ auf nicht aber unter /etc/udev/rules.d/?
Nach allem was ich über udev weißt werden die Regeldateien für die Geräte, die gefunden wurden, nach /etc/udev/rules.d kopiert.
2.) Welche Regel muss ich anpassen? Denke mal die mit SUBSYSTEMS=="scsi", oder?
3.) Wäre die Regel dann so korrekt?
Code:
KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", ENV{BSG_DEV}="$root/bsg/$id" GROUP="disk"

Ach ja:
amrecover wird als Benutzer root ausgeführt. Der Zugriff auf das Band läuft aber über die Gruppe disk.
Ich hatte Amanda schonmal in die Gruppe root aufgenommen. Dies klappt aber auch nicht.
Und die GID will ich nicht verändern, da ich sonst Amanda anpassen müsste.
Code:
server:/etc/udev/rules.d # id amanda
uid=37(amanda) gid=6(disk) groups=6(disk),0(root)


Danke und Gruß,
Khark
 
A

Anonymous

Gast
Schau mal in die Manpage von udev auf deinem System, sowas ähnliches hatten wir hier letztens schon mal http://www.linux-club.de/viewtopic.php?f=21&t=104630&start=19

Wenn ich mich recht erinnere dann wird durch das Anlegen der Dateien unterhalb von /etc/udev/rules.d/ die default KOnfiguration unterhalb von /lib/udev/rules.d/ außer Kraft gesetzt. Du müstes wohl von /lib/udev/rules.d nach /lib/udev/rules.d kopieren und dort darfst du dann ändern, aber auf eigene Gefahr.

Ich würde es noch ganz anders machen, ich würde mir als Root per Startscript eigenen Geräteknoten für die Sicherung erzeugen und diesen dann die entsprechenden Rechte geben.

Ist aber auch nicht so ganz sauber. ;) ;) ;)

robi
 

josef-wien

Ultimate Guru
Bei meinem höchst rudimentären Wissen über UDEV würde ich eine neue Datei in /etc/udev/rules.d/ mit dem entsprechenden Eintrag anlegen. Ob diese Datei alphabetisch vor oder nach 60-persistent-storage-tape.rules kommen muß, kann ich nicht sagen, da ich nicht weiß, ob UDEV bei gleichen Kriterien und widersprechenden Aktionen den ersten oder den letzten Eintrag nimmt.
 
A

Anonymous

Gast
josef-wien schrieb:
Bei meinem höchst rudimentären Wissen über UDEV würde ich eine neue Datei in /etc/udev/rules.d/ mit dem entsprechenden Eintrag anlegen. Ob diese Datei alphabetisch vor oder nach 60-persistent-storage-tape.rules kommen muß, kann ich nicht sagen, da ich nicht weiß, ob UDEV bei gleichen Kriterien und widersprechenden Aktionen den ersten oder den letzten Eintrag nimmt.
Wenn ich die Manpage richtig verstehe, würde das anlegen einer Dateie unterhalb von /etc/udev/rules.d/ mit nur einem Eintrag die gesamte Datei unterhalb von /var/udev/rules.d/ unwirksam machen.
Manpage udev schrieb:
....
Rules files
The udev rules are read from the files located in the default rules directory /lib/udev/rules.d/, the custom rules directory /etc/udev/rules.d/
and the temporary rules directory /dev/.udev/rules.d/. All rule files are sorted and processed in lexical order, regardless in which of these
directories they live.

Rule files are required to have a unique name, duplicate file names are ignored. Files in /etc/udev/rules.d/ have precedence over files with the
same name in /lib/udev/rules.d/. This can be used to ignore a default rules file if needed.
...
Wenn du also eine Datei unter /etc.... anlegst musst du sie komplett pflegen.

robi
 

josef-wien

Ultimate Guru
Ich habe gemeint (aber nicht geschrieben), daß ein neuer (also in keinem der drei Verzeichnisse vorkommender) Dateiname gewählt wird. Und selbstverständlich ist für diese Datei Khark und sonst niemand zuständig.

Außerdem würde ich schrittweise vorgehen:
1. 60-persistent-storage-tape.rules von /lib/udev/rules.d/ nach /etc/udev/rules.d/ kopieren.
2. In /etc/udev/rules.d/60-persistent-storage-tape.rules den entsprechenden Eintrag ändern und solange testen, bis der richtige Eintrag gefunden worden ist.
3. Diesen Eintrag in eine neue Datei /etc/udev/rules.d/61-khark.rules übernehmen, /etc/udev/rules.d/60-persistent-storage-tape.rules wieder löschen und neu starten.
4. Falls das nicht klappt, die Datei 61-khark.rules auf 59-khark.rules umbenennen und neu starten.
5. Falls das auch nicht funktioniert, bin ich mit meiner Weisheit am Ende.
 
OP
G

Grumpelmampf

Newbie
Hallo,

erstmal vielen Dank für die vielen Antworten.
Bringt mich auf jedenfall weiter.

Ich werde nochmal die Manpage von udev lesen, da ich gerne wissen will ob es sinniger ist:
a) Eine neue Regeldatei mit der angepassten Regel zu erstellen die dann die Standardregel überschreibt, oder
b) Die Regeldatei zu kopieren und nur anzupassen.

Testen werde ich das ganze wohl am Wochenende und dann hier mal meine Erfahrungen posten.

Danke und Gruß,
Khark
 
Oben