[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