2014-04-07 13:42:39 +0000 2014-04-07 13:42:39 +0000
26
26

bestanden verwijderen maar schijfruimte is nog steeds vol

Omgaan met oude CentOS 5.6 doos, zonder lvm setup, mijn root bestandssysteem / is vol, ik heb gewist veel oude log bestanden en applicatie bestanden die ik niet nodig heb, dat was meer dan 2 -5GB in grootte, maar mijn systeem nog steeds meldt dat de schijf vol is.

[root@tornms1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 130G 124G 0 100% /
/dev/sdb1 264G 188M 250G 1% /data
/dev/sda1 99M 24M 71M 26% /boot
tmpfs 2.0G 0 2.0G 0% /dev/shm

[root@tornms1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sdb1 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

Enig idee wat ik nu moet proberen te doen? Helaas is het opnieuw opstarten van de box op dit moment geen optie.

Antwoorden (9)

38
38
38
2014-04-07 14:02:13 +0000

Er kunnen hier twee dingen aan de hand zijn.

Uit de eerste plaats heeft uw bestandssysteem wat ruimte gereserveerd waar alleen root naar kan schrijven, zodat kritische systeemprocessen niet omvallen als normale gebruikers geen schijfruimte meer hebben. Dat is waarom u 124G van 130G gebruikt ziet, maar nul beschikbaar. Misschien hebben de bestanden die je verwijderd hebt het gebruik naar dit punt gebracht, maar niet onder de drempel voor normale gebruikers.

Als dit je situatie is en je wanhopig bent, kun je misschien de hoeveelheid ruimte die gereserveerd is voor root veranderen. Om het te verlagen naar 1% (de standaard is 5%), zou je commando

# tune2fs -m 1 /dev/sda3

Tweede , het besturingssysteem zal geen schijfruimte vrijgeven voor verwijderde bestanden die nog open staan. Als u (bijvoorbeeld) een van Apache’s logbestanden hebt verwijderd, zult u Apache opnieuw moeten starten om de ruimte vrij te maken.

18
18
18
2015-09-24 09:32:08 +0000

Als je een bestand verwijdert dat door een proces wordt gebruikt, kun je het bestand niet langer bekijken door ls. Het proces schrijft nog steeds naar dat bestand totdat je het proces stopt.

Om die verwijderde bestanden te bekijken, hoef je alleen maarlsof|grep delete

10
10
10
2014-04-07 21:03:43 +0000

2 andere manieren om het schijf is vol probleem te krijgen:

1) verborgen onder een koppelpunt: linux zal een volle schijf laten zien met bestanden “verborgen” onder een koppelpunt. Als je data naar de schijf hebt geschreven en er een ander bestandssysteem overheen mounten, zal linux het schijfgebruik correct noteren, ook al kun je de bestanden onder het koppelpunt niet zien. Als je nfs mounts hebt, probeer ze dan te umounten en kijk of er per ongeluk iets in die directories is geschreven voordat de mount plaatsvond.

2) Gecorrumpeerde bestanden: Ik zie dit af en toe bij windows naar linux bestandsoverdracht via SMB. Een bestand slaagt er niet in om de bestandsdescriptor te sluiten en je eindigt met een 4GB bestand aan rotzooi.

Dit kan lastiger op te lossen zijn, omdat je de subdirectory moet vinden waar het bestand zich in bevindt, maar het is eenvoudig op te lossen omdat het bestand zelf gemakkelijk te verwijderen is. Ik gebruik het commando du en maak een lijst van de root-subdirs om uit te vinden waar de bestandsruimte wordt gebruikt.

cd /
du -sh ./*

Het aantal top level directories is meestal beperkt, dus zet ik de human readable vlag -h om te zien welke subdirectory de ruimtevreters zijn.

Dan cd je naar het probleemkind en herhaal je het proces voor alle items erin. Om dit gemakkelijk te maken om de grote items te vinden, veranderen we de du een beetje en koppelen het aan een sort.

cd /<suspiciously large dir>
du -s ./* | sort -n

dat produceert een kleinste tot grootste uitvoer op grootte per byte voor alle bestanden en directories

4 ./bin 
462220 ./Documents
578899 ./Downloads
5788998769 ./Grocery List

Zodra je het te grote bestand ziet, kun je het meestal gewoon verwijderen.

4
4
4
2014-04-07 14:27:52 +0000

Je zou kunnen uitzoeken welke bestanden open staan met lsof. Het kan veel uitvoer produceren, dus ik heb me in onderstaand voorbeeld beperkt tot regels die eindigen op log:

# lsof | grep log$
rsyslogd 2109 syslog 0u unix 0xffff88022fa230c0 0t0 8894 /dev/log
rsyslogd 2109 syslog 1w REG 252,6 62393 26 /var/log/syslog
rsyslogd 2109 syslog 2w REG 252,6 113725 122 /var/log/auth.log
rsyslogd 2109 syslog 3u unix 0xffff88022fa23740 0t0 8921 /var/spool/postfix/dev/log
rsyslogd 2109 syslog 5w REG 252,6 65624 106 /var/log/mail.log
/usr/sbin 2129 root 2w REG 252,6 93602 38 /var/log/munin/munin-node.log
/usr/sbin 2129 root 4w REG 252,6 93602 38 /var/log/munin/munin-node.log
...
1
1
1
2017-06-08 10:02:04 +0000

Als sommige bestanden verwijderd zijn, maar nog steeds gebruikt worden door een proces, dan zal de ruimte niet worden vrijgegeven. In dit geval kunt u het proces dat het bestand gebruikt herstarten of het bestand wissen. Het is altijd een goed idee om zulke bestanden te wissen in plaats van ze te verwijderen. Om verwijderde bestanden te vinden, maar ze zijn nog in gebruik door een proces

#lsof +L1

het zal proces id en file descriptor geven. Om verwijderde bestanden te verwijderen via de bestandsdescriptor

#echo "" > /proc/$pid/fd/$fd
1
1
1
2020-02-27 01:18:39 +0000

In de meeste gevallen als we een logbestand verwijderen wordt het bestand niet meer bekeken door ls. Het proces schrijft nog steeds naar dat bestand totdat je het proces stopt.

1
1
1
2017-10-31 13:45:06 +0000

Type het commando

#lsof +L1

Dat toont de lijst met bestanden die geheugen vasthouden met verwijderde quote.

Noteer de pid ( Proces id ) van het bestand

Kill het proces

#kill <pid>

Het geheugen zal worden vrijgegeven door het proces

Controleer het met commando

#df -h
0
0
0
2016-06-02 09:58:41 +0000

Werkelijk in het wild waargenomen probleem:

Zorg ervoor dat je de eigenlijke bestanden verwijdert en niet symlinks naar de bestanden. Dit kan het geval zijn voor logbestanden in het bijzonder.

0
0
0
2016-01-23 08:00:36 +0000

Aanvullend op wat is uitgelegd, kan het probleem zijn dat er een ander koppelpunt is van de verwijderde bestandsmap op een ander aangekoppeld schijfapparaat op dezelfde server. Controleer de huidige mounts en de fstab entries.