[LinuxOB] swapoff für gelöschtes swapfile

Daniel Dombrowski daniel.dombrowski at linuxob.de
Mi Okt 12 15:53:14 CEST 2005


On Wed, 2005-10-12 at 15:36 +0200, Hesse, Christian wrote:
> On Wednesday 12 October 2005 15:21, Michael Gisbers wrote:
> > Am Wednesday, 12. October 2005 12:29 schrieb Hesse, Christian:
> > > On Wednesday 12 October 2005 12:21, Daniel Dombrowski wrote:
> > > > On Wed, 2005-10-12 at 01:27 +0200, Hesse, Christian wrote:
> > > > > Hallo zusammen,
> > > > >
> > > > > ich habe hier ein sehr interessantes Problem, mal sehen ob dazu
> > > > > jemand eine Lösung findet. Angenommen ich erstelle mir ein swapfile
> > > > > und binde es anschließend ein:
> > > > >
> > > > > $ dd if=/dev/zero of=swap bs=1k count=1M
> > > > > $ mkswap swap
> > > > > $ swapon swap
> > > > >
> > > > > Jetzt lösche ich die Datei:
> > > > >
> > > > > $ rm swap
> > > > >
> > > > > Der Kernel greift jetzt noch als swapspace drauf zu, nur dummerweise
> > > > > kann ich das Ding nicht wieder loswerden. swapoff will eine
> > > > > existierende Datei haben...
> > > >
> > > > Also, ich mache mal zwei Vorschläge:
> > >
> > > Also einmal vorweg:
> > >
> > > root at logo:~# swapon -s
> > > Filename                                Type            Size    Used
> > > Priority
> > > /dev/hda2                               partition       1028152 0      
> > > -4 /mnt/data/swap1\040(deleted)            file            1048568 15852 
> > >  -3
> > >
> > > > 1. Einfach mit touch eine leere Datei an der Stelle erstellen, wo die
> > > > gelöschte swap-Datei lag. Dann mit swapoff entsprechend deaktivieren.
> > >
> > > root at logo:~# touch /mnt/data/swap1
> > > root at logo:~# swapoff /mnt/data/swap1
> > > swapoff: /mnt/data/swap1: Invalid argument
> > >
> > > > 2. Ändert es etwas, wenn die swap-Datei korrekt in /etc/fstab
> > > > eingetragen ist?
> > >
> > > root at logo:~# grep swap /etc/fstab
> > > /dev/hda2      swap    swap    defaults                0       0
> > > /mnt/data/swap1   swap   swap      defaults         0       0
> > > root at logo:~# swapoff -a
> > > root at logo:~# swapon -s
> > > /mnt/data/swap1\040(deleted)            file            1048568 15852  
> > > -3
> > >
> > > Funktioniert also beides nicht...
> >
> > Habe ich mir gedacht.... Ist ein ähnliches Spiel wie beim Löschen von
> > Dateien, die z. B. noch von syslogd benutzt werden. Es kann solange die
> > Datei benutzt werden wie ein Prozeß einen Handle darauf hat.
> 
> Und solange ein Prozess drauf zugreift kann man die Datei auch noch retten, 
> sie ist dann nämlich noch unter /proc/$PID/fd/$FILE erreichbar. Nur leider 
> scheint das für Kernelthreads nicht zu gelten...

Was passiert denn, wenn du den Dateinamen genau so verwendest, wie
swapon -s ihn dir gibt? Also incl. dem \040(deleted) dran.

> > Ist der Handle weg und es gibt keine weiteren Prozesse die auf die Datei zugreifen, dann
> > wird auch die Datei freigegeben.
> >
> > Erst dann wird sie auch im Filesystem freigegeben.
> 
> Ja, so ist es ja auch sinnvoll. Nur kann ich in meinem Fall nicht mal so eben 
> den Prozess beenden.
> 
> > Bei der Vorgehensweise von Christian ist es natürlich ärgerlich, daß er
> > erst die Datei gelöscht hat bevor er die Datei freigegeben hat.
> 
> Ärgerlich würde ich nicht sagen. Habe das ja absichtlich gemacht um zu schauen 
> was passiert. :)

Das Problem ist ja eigentlich, dass swapoff nichts mehr mit dem
gelöschten swap-File anfangen kann. Könnte man den Swap für diese Datei
wieder deaktivieren, wäre das ja alles kein Problem. Man könnte
natürlich auch versuchen, einfach den Kernel-Prozess zu töten - ich
zweifel allerdings an, dass der das so lustig finden wird.

Wie verhält sich das System denn beim normalen herunterfahren - irgendwo
muss doch die Stelle kommen, wo die init-Scripte versuchen, den swap zu
deaktivieren.

Gruss

Daniel




Mehr Informationen über die Mailingliste linux