Hoe een druk apparaat ontkoppelen

Ik heb enkele Samba-drives die dagelijks door meerdere gebruikers worden geopend. Ik heb al code om gedeelde schijven (van een SQL-tabel) te herkennen en ze in een speciale map te monteren waar alle gebruikers toegang hebben.

Ik wil weten, als ik een rit van mijn SQL-tabel (effectief het offline haalt) hoe, of is er een manier om een ​​druk apparaat op te lossen? Tot nu toe heb ik gevonden dat elke vorm van umountniet werkt.

De mogelijkheid negeren van het vernietigen van gegevens – is het mogelijk om een ​​apparaat te ontkoppelen dat momenteel wordt gelezen?


1, Autoriteit 100%

ja !! Er is een manier om een ​​druk apparaat onmiddellijk los te maken – zelfs als het druk is en niet krachtig kan worden gemaakt. U kunt uiterst later opruimen:

umount -l /PATH/OF/BUSY-DEVICE
umount -f /PATH/OF/BUSY-NFS (NETWORK-FILE-SYSTEM)

Note / Let op

  1. Deze opdrachten kunnen een hardloopproces verstoren, gegevensverlies of corrupte open bestanden veroorzaken. Programma’s die toegang krijgen tot doelapparaat / NFS-bestanden kunnen fouten gooien of niet goed na geweld kunnen werken.
  2. DO Niet uitvoeren hierboven umountOpdrachten bij binnengemonteerde pad (map / drive / apparaat) zelf. Ten eerste kunt u pwd-opdracht gebruiken om uw huidige directorypad te valideren (dat niet het gemonteerde pad mag zijn), gebruik vervolgens cdopdracht om uit het gemonteerde pad te komen – naar Ontmoeit het later met behulp van bovenstaande opdrachten.

2, Autoriteit 27%

Laat ons indien mogelijk het bezetproces lokaliseren / identificeren, doden dat proces en vervolgens unmountDe Samba Share / Drive om schade te minimaliseren:

  • lsof | grep '<mountpoint of /dev/sda1>'(of wat het gemonteerde apparaat ook is)

  • pkill target_process(vernietigt drukke proc. op naam | kill PID| killall target_process)

  • umount /dev/sda1(of wat het aangekoppelde apparaat ook is)


Antwoord 3, autoriteit 18%

Zorg ervoor dat u zich niet nog steeds in het gekoppelde apparaat bevindt wanneer u probeert te unmounten.


4, Autoriteit 8%

Probeer het volgende, maar voordat het runnen van het er rekening mee dat de -kvlag zal alle actieve processen te doden houden van het apparaat druk.

-iflag merken fuserom bevestiging vragen.

fuser -kim /address  # kill any processes accessing file
unmount /address

5

Controleer voor geëxporteerde NFS bestandssystemen met exportfs -v. Indien gevonden, te verwijderen met exportfs -d aandeel: / directory. Deze hoeven niet te zien in de fuser / lsof notering, en kan voorkomen dat umount van slagen.


6

Check out umount2:

Linux 2.1.116 voegde de umount2 () system call, die net als umount (),
deactiveert een doel, maar maakt het extra vlaggen regelen van de
gedrag van de operatie:

MNT_FORCE (sinds Linux 2.1.116) Force ontkoppelen zelfs als druk. (Alleen voor
. NFS mounts) MNT_DETACH (sinds Linux 2.4.11) Voer een luie ontkoppelen:
maken het koppelpunt niet beschikbaar voor nieuwe toegangen, en eigenlijk
Voer de ontkoppelen wanneer het koppelpunt niet langer bezig te zijn. MNT_EXPIRE
(sinds Linux 2.6.8) Markeer het koppelpunt als verlopen. Als een aankoppelpunt
momenteel niet in gebruik is, dan een eerste aanroep naar umount2() hiermee
vlag mislukt met de fout EAGAIN, maar markeert het koppelpunt als
verlopen. Het koppelpunt blijft verlopen zolang het niet wordt gebruikt
door welk proces dan ook. Een tweede umount2()-aanroep die MNT_EXPIRE specificeert om te ontkoppelen
een verlopen koppelpunt. Deze vlag kan met geen van beide worden opgegeven
MNT_FORCE of MNT_DETACH. Retourwaarde

Bij succes wordt nul geretourneerd. Bij een fout wordt -1 geretourneerd en errno is
correct instellen.


Antwoord 7

Voor het geval iemand dezelfde pb heeft. :

Ik kon het koppelpunt (hier /mnt) van een chroot-jail niet ontkoppelen.

Hier zijn de commando’s die ik heb getypt om te onderzoeken:

$ umount /mnt
umount: /mnt: target is busy.
$ df -h | grep /mnt
/dev/mapper/VGTout-rootFS  4.8G  976M  3.6G  22% /mnt
$ fuser -vm /mnt/
                     USER        PID ACCESS COMMAND
/mnt:                root     kernel mount /mnt
$ lsof +f -- /dev/mapper/VGTout-rootFS
$

Zoals je kunt zien, levert zelfs lsofniets op.

Toen kwam ik op het idee om dit te typen:

$ df -ah | grep /mnt
/dev/mapper/VGTout-rootFS  4.8G  976M  3.6G  22% /mnt
dev                        2.9G     0  2.9G   0% /mnt/dev
$ umount /mnt/dev
$ umount /mnt
$ df -ah | grep /mnt
$

Hier was het een /mnt/devbinding met /devdie ik had gemaakt om mijn systeem te kunnen repareren vanuit de chroot-jail.

Na het umounten, mijn pb. is nu opgelost.


Antwoord 8

Iemand heeft gezegd dat als je terminal gebruikt en je huidige map zich in het pad bevindt dat je wilt ontkoppelen, je de foutmelding krijgt.
Als aanvulling, in dit geval, uw lsof | grep path-to-be-unmountedmoet onderstaande output hebben:

bash ... path-to-be-unmounted

Antwoord 9

Ik had onlangs een soortgelijke behoefte om te ontkoppelen om het label te wijzigen met gparted.

/dev/sda1 werd gemount via /etc/fstab als /media/myusername. Toen pogingen om te ontkoppelen mislukten, heb ik de fout onderzocht. Ik was vergeten een dubbel gepartitioneerde USB-stick met een koppelpunt op /dev/hda1 eerst te ontkoppelen.

Ik heb ‘lsof’ geprobeerd zoals aanbevolen.

$ sudo lsof | grep /dev/sda1

De uitvoer daarvan was:

lsof: WAARSCHUWING: can’t stat() fuse.gvfsd-fuse bestandssysteem /run/user/1000/gvfs
Uitvoerinformatie is mogelijk onvolledig.
lsof: WAARSCHUWING: can’t stat() fuse file system /run/user/1000/doc
Uitvoerinformatie is mogelijk onvolledig.

Sinds lsof twee zekeringwaarschuwingen opwekte, snuffelde ik rond in /run/user/1000/*, en vermoedde dat het open bestanden of koppelpunten (of beide) zouden kunnen zijn die de zaken verstoren.

Sinds de aankoppelpunten in /media/ staan, heb ik het opnieuw geprobeerd met:

$ sudo lsof | grep /media

Dezelfde twee waarschuwingen, maar deze keer leverde het aanvullende informatie op:

bash 4350 mijngebruikersnaam cwd DIR 8,21 4096 1048577 /media
sudo 36302 root cwd DIR 8,21 4096 1048577 /media
grep 36303 mijngebruikersnaam cwd DIR 8,21 4096 1048577 /media
lsof 36304 root cwd DIR 8,21 4096 1048577 /media
lsof 36305 root cwd DIR 8,21 4096 1048577 /media

Ik krabde me nog steeds op mijn hoofd, het was op dit puntdat ik me herinnerde dat de USB-stick uit de USB-poort stak. Misschien heeft het krabben geholpen.

Dus ik ontkoppelde de schijfpartities (de ene ontkoppelde automatisch de andere) en ontkoppelde de schijf veilig. Nadat ik dit had gedaan, was ik in staat om /dev/sda1 te ontkoppelen (er was niets meer aangekoppeld), het opnieuw te labelen met gparted, zowel de schijf als de USB-stick opnieuw te koppelen zonder enig probleem.
Spek bewaard.


Antwoord 10

Een ander alternatief als iets werkt, is het bewerken van /etc/fstab, het toevoegen van de vlag noautoen het opnieuw opstarten van de machine. Het apparaat wordt niet gemount en als je klaar bent met wat dan ook, verwijder dan de vlag en start opnieuw op.


Antwoord 11

Niche-antwoord:

Als je een zfs-pool op dat apparaat hebt, tenminste als het een op bestanden gebaseerde pool is, zal lsofhet gebruik niet tonen. Maar je kunt gewoon rennen

sudo zpool export mypool

en dan ontkoppelen.


Antwoord 12

Meerdere koppelingen in een map

Een extra reden kan een secundaire koppeling in uw primaire koppelingsmapzijn, b.v. nadat je aan een SD-kaart voor een ingebouwd apparaat hebt gewerkt:

# mount /dev/sdb2 /mnt       # root partition which contains /boot
# mount /dev/sdb1 /mnt/boot  # boot partition

Ontkoppelen van /mnt zal mislukken:

# umount /mnt
umount: /mnt: target is busy.

Eerst moeten we de opstartmap ontkoppelen en dan de root:

# umount /mnt/boot
# umount /mnt

Other episodes