Kun tiedosto poistetaan, se merkitään vapaaksi tilaksi. Tiedoston sisältöä ei päällekirjoiteta, joten sen sisältämä tieto on löydettävissä kiintolevyltä kunnes se levykohta otetaan uudelleen käyttöön. Kiintolevyn magneettisten ominaisuuksien vuoksi tieto voi olla palautettavissa vielä päällekirjoituksen jälkeenkin.
Linux-tietokoneessa voi olla käytössä monia tiedostojärjestelmiä. Useimmiten käytettävät tiedostojärjestelmät (esim. ext3) ovat Windows-tiedostojärjestelmiä kehittyneempiä - ne eivät kirjoita suoraan tiedon päälle, vaan muutokset tehdään ensin "lokikirjaan" (journaling). Tämän vuoksi Linux-tiedostojärjestelmät kestävät paremmin häiriöitä esimerkiksi, jos sähköt katoavat kesken käsittelyn. Mutta tiedon tuhoamisen kannalta tämä tarkoittaa, että tiedoston tietojen muuttaminen ei päällekirjoita samaa kohtaa kiintolevyllä. Tiedoston muutokset menevät levyllä eri paikkaan kuin alkuperäinen tieto.
Jos tiedostojärjestelmä tukee tiedostojen päällekirjoitusta, sen tekemiseen Linuxiin on saatavissa useita ohjelmia: shred, srm, wipe ja scrub. Shred on todennäköisimmin käytettävissä jo perusjakelussa:
shred --remove pois.txt
päällekirjoittaa tiedoston pois.txt 25-kertaisesti ja lopuksi poistaa sen.
Komennon wipe valitsimet ovat paljon monipuolisemmat ja se esimerkiksi tukee kokonaisen hakemiston poistamista valitsimella -r eli --recursive:
wipe --recursive tiedostot
Päällekirjoituksen voi tehdä myös omalla ohjelmalla, mutta Linuxissa on muistettava, että tiedostoihin tehdyt muutokset varastoidaan keskusmuistiin ja siirretään levylle vasta jonkin ajan kuluttua. Siksi kirjoitusten välillä tulee käyttää komentoa sync.
Linux osaa käyttää joustavasti eri tiedostojärjestelmä. Tuhottavat tiedot voidaan siten laittaa sellaiselle tiedostojärjestelmälle, jossa päällekirjoitus toimii. Tällaisia tiedostojärjestelmiä ovat esimerkiksi vanha ext2-tiedostojärjestelmä ja Windows-tietokoneista tuttu yksinkertainen FAT-tiedostojärjestelmä.
Seuraavissa esimerkeissä on käytetty esimerkkeinä SCSI-levyjen levyosoita, esimerkiksi /dev/sda1 ja /dev/sda2. Älä käytä komentoja sellaisenaan vaan selvitä huolellisesti oman järjestelmäsi levyosioiden nimet. Esimerkkien käyttäminen sellaisenaan tuhoaa todennäköisesti peruuttamattomasti kiintolevysi sisällön.
FAT-tiedostojärjestelmän tekeminen puhtaalle levyosiolle tehdään komennolla
mkfs -t fat /dev/sda2
FAT-tiedostojärjestelmän pitkien tiedostonimien käyttö on Microsoftin patentoima tekniikka, jonka käyttö sulautetuissa sovelluksissa voi johtaa Microsoftin patenttivaatimuksiin.
ext2-tiedostojärjestelmä tehdään puhtaalle levyosiolle komennolla
mkfs -t ext2 /dev/sda2
Mikäli tietokone on virtuaalinen (esimerkiksi VMware tai Virtualbox), tiedostojärjestelmä ei välttämättä ole suoraan kiintolevyllä, vaikka se siltä virtuaalitietokoneen käyttöjärjestelmästä vaikuttaisikin. Virtuaalitietokoneympäristössä on varmistuttava siitä, että ext2-tiedostojärjestelmä tehdään suoraan fyysiselle kiintolevylaitteelle. Myös verkon yli käytetyt fyysisen näköiset levylaitteet saattavat olla virtuaalisia.
Yleisimmin Linuxissa käytettävä tiedostojärjestelmä on ext3, jossa tiedostojen muutokset kirjoitetaan levylle eri paikkaan kuin edellinen tieto. ext3-tiedostojärjestelmän edeltäjä, ext2-tiedostojärjestelmä, kirjoitti tiedoston muutokset suoraan kiintolevylle samaan kohtaan. ext3-tiedostojärjestelmä on muunnettavissa ext2-tiedostojärjestelmäksi. ext3-tiedostojärjestelmän muuntaminen ext2-muotoon tai käyttäminen ext2-muodossa ei ole suositeltavaa ja seuraavat ohjeet johtavat helposti peruuttamattomiin hankaluuksiin.
Käyttämättömänä olevan ext3-tiedostojärjestelmän journaling-ominaisuus voidaan kytkeä pois päältä ja päälle tarvitsematta uudelleenkäynnistää tietokonetta komennolla:
umount /dev/sda2
tune2fs -O ^has_journal /dev/sda2
e2fsck /dev/sda2
mount /dev/sda2 /mnt
...tiedostojärjestelmän turhien tietojen tuhoaminen /mnt-hakemistossa
umount /mnt
tune2fs -O has_journal /dev/sda2
e2fsck /dev/sda2
Juuritiedostojärjestelmää ei voi käsitellä edellä kuvatulla tavalla, koska se on aina käytössä.Seuraava ohje saattaa toimia juuritiedostojärjestelmälle, mutta sitä ei ole testattu ja se on vaarallinen.
ext3-tiedostojärjestlemä on teoriassa niin yhteensopiva vanhan ext2-tiedostojärjestelmän kanssa, että ext3-levy voidaan ottaa käyttöön ext2-levynä. Levyn käyttöönotto määritellään tiedostossa /etc/fstab. Esimerkiksi:
# device name mount point fs-type options dump-freq pass-num /dev/sda1 / ext3 defaults 1 1
Kun ext3 muutetaan ext2:ksi, tietokoneen seuraavassa käynnistyksessä päätiedostojärjestelmä "/" otetaan käyttöön ext2-tyyppisenä, jolloin muutokset kirjoitetaan suoraan levylle. Käynnistyvän Linux-ytimen on tuettava käynnistymistä ext2-tiedostojärjestelmältä, jotta tämä onnistuu. Vaikka Linux-ydin osaisi käsitellä ext2-tiedostojärjestelmiä, se ei ole tae siitä että se osaisi käynnistyä ext2-levyltä - saatat joutua tutustumaan mkinitrd-komentoon. Jos muunnos ext2-tiedostojärjestelmäksi tehdään, on suositeltavaa jättää tiedostojärjestelmä ext2-muotoiseksi tästä eteenpäin.
ext2-tiedostojärjestelmän ottaminen takaisin käyttöön ext3-tyyppisenä edellyttäisi journalin luomista:
tune2fs -O has_journal /dev/sda1
e2fsck /dev/sda1
mutta koska tätä ei voi tehdä käytössä olevalle juuritiedostojärjestelmälle, ainoa vaihtoehto tehdä tämä on käynnistää tietokone jollain live-CD-jakelulla, esimerkiksi Knoppix.
ext2-tiedostojärjestelmä on paljon herkempi virheille kuin ext3-tiedostojärjestelmä, ja sitä käytettäessä tiedostojärjestelmän tarkastus (fsck) tulisi tehdä säännöllisesti.
Harvoin voit olla varma, että kaikki tietokoneen tiedostot on siivottu asiallisesti. Ohjelmat voivat poistaa tiedostoja ilman, että tiedät siitä mitään. Sen vuoksi saatat joutua päällekirjoittamaan kaiken tietokoneessa olevan käyttämättömän levytilan.
Ohjelma scrub osaa varata tiedostojärjestelmässä olevan vapaan tilan ja siivota sen. Siivouksen aikana kaikki vapaa tila on varattu eikä tietokone ole sen vuoksi kovin käyttökelpoinen. Komento:
scrub --freespace /home/.tmp
luo hakemistoon /home/.tmp tiedostoja kunnes tiedostojärjestelmä on täynnä. Tämän jälkeen ohjelma päällekirjoittaa nämä tiedostot.
Huomaa, että tämäkään menetelmä ei toimi luotettavasti, ellei tiedostojärjestelmä kirjoita suoraan levylle.
Toinen ohjelma, joka osaa saman toiminnan on bcwipe, mutta sen lisenssi on osittain kaupallinen.
Turvallisempaa on salata koko kovalevy kuin yrittää siivota sen käyttämätöntä tilaa
Koko levyosio on helppoa tyhjentää Linuxissa, koska sitä eivät koske tiedostojärjestelmien rajoitukset. Koko tiedostojärjestelmää voidaan käsitellä yhtenä tiedostona sen laitenimen avulla. Esimerkiksi toinen SCSI-kiintolevy on nimeltään /dev/sdb ja sen kolmas partitio on nimeltään /dev/sdb3. Se voidaan tyhjentää esimerkiksi komennolla shred käyttäen tiedoston nimenä partition laitetiedostoa:
shred /dev/sdb3
Tai siihen voidaan käyttää suoraan järjestelmän perustyökaluja. Seuraava komento päällekirjoittaa yhden kerran satunnaisella tiedolla koko toisen SCSI-levyn (mukaanlukien osiotaulut ja käynnistyslohko):
cat /dev/urandom > /dev/sdb
sync
Tämä tosin aiheuttaa virheilmoituksen levyn loppuessa. Sama voidaan tehdä dd-komennolla siistimmin ja nopeammin, mutta silloin levyn tarkka koko pitää tietää.
dd if=/dev/urandom of=/dev/sdb bs=1M count=152627
Helposti puhdistettavassa Linux-tietokoneessa suurin osa tiedostoista olisi tiedostojärjestelmissä, joihin ei voi ollenkaan kirjoittaa. Teoriassa päätason normaalihakemistoista vain /var- ja /home-hakemistoihin tarvitsee voida kirjoittaa normaalin käytön aikana. Käytännössä löytyy valitettavasti ohjelmia, jotka haluavat kirjoittaa esimerkiksi /etc-hakemistoon. Voit kuitenkin tutkia, voiko käyttämässäsi jakelussa sijoittaa muut päätason hakemistot eri tiedostojärjestelmiin (eri levyosioille), ja käyttää niitä kirjoitussuojattuna (mount -o ro).
/tmp on erikoishakemisto tilapäistiedostoille ja se on nykyään TMPFS-tyyppinen eli siellä olevat tiedostot ovat joko keskusmuistissa tai sivutustiedostossa. /tmp-hakemiston tiedostot eivät käy koskaan kiintolevyllä sivutustiedoston ulkopuolella, eivätkä ne säily tietokoneen uudelleenkäynnistyksessä. RAMFS on tiedostojärjestelmä, joka sijaitsee keskusmuistissa eikä se koskaan käytä edes sivutustiedostoa. Voit luoda oman tiedostojärjestelmän tiedostoille, jotka eivät koskaan joudu kiintolevylle komennolla:
mount -t ramfs none /mnt
Liitettävä laite on "none", koska RAMFS-tiedostojärjestelmä syntyy tyhjästä, eikä sille määritellä maksimikokoa. Jos keskusmuisti loppuu kesken, joudut varoittamatta vakaviin vaikeuksiin.
Varmin tapa pitää levyosiot puhtaana on käyttää kahta levyosiota tiedoille ja pitää tiedot toisella, kun toinen levyosio tyhjennetään kokonaisuudessaan. Esimerkiksi hakemistolle /var voidaan varata kaksi levyosiota, /dev/sdb2 ja /dev/sdb3. Kumpikin levyosio otetaan käyttöön esimerkiksi hakemistoihin /m/var1 ja /m/var2. Oletetaan, että alussa /m/var1 sisältää hakemiston /var tiedot ja /m/var2 on varmistetusti tyhjä. Linkitetään /var oikeaan hakemistoon:
ln -sf /m/var1 /var
Sammutetaan kaikki ohjelmat, jotka käyttävät /var-hakemistoa. Nämä löytyvät komennolla:
lsof /var
kopioidaan käytössä olevan /var-hakemiston tiedot puhtaaseen hakemistoon
cp -a /var1/* /var2
missä -a tarkoittaa "archive" eli kaikki tiedot kopioidaan omistajineen ja oikeuksineen identtisesti. Mahdollisten pisteellä alkavien tiedostojen kopioimista varten joudutaan tekemään hieman lisää töitä. Nopeampi ja pistetiedostotkin kopioiva komento on:
cd /var2
tar cf - /var1 | tar xf -
"kovat" linkit käsittelee helpoiten kolmas vaihtoehto:
rsync -H /var1/* /var2
Kopionnin jälkeen voidaan uusi kopio ottaa käyttöön:
ln -sf /m/var2 /var
Ja nyt ensimmäinen tiedostojärjestelmä voidaan siivota:
umount /m/var1
shred /dev/sdb2
Ja seuraavalla kerralla sama toisinpäin.
Yleensä Linux ei tyhjennä sivutustiedostoa koskaan. Tämän tekevä muutos voidaan tehdä käsin esimerkiksi siten, että selvitetään, koska tietokonetta sammutettaessa sivitustiedoston käyttö lopetetaan. Linuxissa sivutustiedosto on melkein aina kokonainen levyosio.
Esimerkiksi sivutustiedoston käytön lopetus voi olla tiedostossa /etc/init.d/umountfs:
...
swapoff -a
...
Kun olet selvittänyt sivutusosion, voit lisätä siivouskomennon, esimerkiksi:
shred --iterations=1 /dev/sdb4
Näppärin tapa koko tietokoneen kovalevyn varmaan tyhjentämiseen on DBAN eli Darik's Boot and Nuke. DBAN kopioidaan CD-ROM:lle, USB-muistille tai disketille, jolta tietokone käynnistetään. Tietokoneen omaan kiintolevyyn ei kosketa ollenkaan tietokoneen käynnistyksessä. Yksinkertaisesta käynnistysmenusta valitaan tuhottava kovalevy ja ohjelma käynnistetään.
DBAN on Linux-pohjainen ilmainen ohjelma.
shred http://www.gnu.org/software/coreutils/manual/html_node/shred-invocation.html
srm http://sourceforge.net/projects/srm
Wipe http://wipe.sourceforge.net/
Scrub https://computing.llnl.gov/linux/scrub.html
DBAN http://www.dban.org
Knoppix http://www.knoppix.org
Kuinka palauttaa tiedostoja ext3-tiedostojärjestelmässä
http://www.xs4all.nl/~carlo17/howto/undelete_ext3.html
Ext2-tiedostojärjestelmän muuttaminen ext3-tiedostojärjestelmäksi ja päinvastoin
http://www.troubleshooters.com/linux/ext2toext3.htm
TMPFS http://en.wikipedia.org/wiki/TMPFS
RAMFS http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt