-
Datan hallinta Puhdin ja Mahdin scratch-levyillä
Datan hallinta Puhdin ja Mahdin scratch-levyillä
Tärkeä tehtävä kaikille Puhdin ja Mahdin käyttäjille on hallita sitä, mitä dataa sijaitsee projektien
scratch-kansioissa. Ne on tarkoitettu vain väliaikaiseksi tallennustilaksi datalle, joka on
aktiivisessa käytössä. Kaikki muu data tulisi poistaa tai tallentaa muihin paremmin soveltuviin
tallennusjärjestelmiin. Käyttäjien ei oleteta käyttävän koko kiintiötään; enimmäiskiintiö on tarkoitettu
vain lyhytaikaisiin käyttöpiikkeihin.
Huomaa myös, että:
- Lustre-rinnakkaistiedostojärjestelmän suorituskyky alkaa heikentyä, kun levytilasta on käytössä noin 70 %,
ja mitä täydemmiksi levyt tulevat, sitä hitaammaksi suorituskyky muuttuu.
CSC on myöntänyt enemmän kiintiötä kuin levytilaa on käytettävissä, joten kaikkien käyttäjien ei ole edes
mahdollista käyttää
scratch-kansioitaan pidempiaikaiseen tallennukseen. scratch-levyalueesta ei ole varmuuskopioita. Älä luota siihen kaiken tutkimusdatasi säilytyspaikkana.- Tiedostojen poistaminen voi vähentää projektisi Storage BU -kulutusta, koska ylimenevästä levytilan käytöstä yli 1 TiB:n veloitetaan.
Pyydämme ystävällisesti kaikkia käyttäjiä auttamaan levytilan käytön pitämisessä hallittavana ja suorituskyvyn kohtuullisena. Tee seuraavat toimet:
- Poista tiedostot, joita ei enää tarvita projektisi
scratch-kansiosta. Huomaa, että emme voi palauttaa vahingossa poistamiasi tiedostoja, joten tee nämä toimenpiteet huolellisesti! - Pakkaa tiedostot, jos se pienentää tiedostokokoa. ASCII-tekstitiedostot pakkautuvat yleensä erittäin hyvin. Testaa ensin yhdellä tiedostolla. Jos tiedostokoko pienenee 50 %, pakkaa kaikki vastaavat tiedostot. Katso täältä saatavilla olevat pakkaustyökalut.
- Siirrä tiedostot, jotka eivät ole juuri nyt aktiivisessa käytössä mutta joiden täytyy olla myöhemmin projektin aikana saatavilla. Tyypillinen toimintamalli on siirtää tiedostot Altaaseen. Suosittelemme käyttämään a-tools-työkaluja pieniin ja keskisuuriin datansiirtoihin, erityisesti silloin kun sinulla on paljon pieniä tiedostoja. Nämä työkalut tekevät Allaksen käytöstä turvallisempaa ja voivat helpottaa datan hallintaa. Erittäin suuriin datansiirtoihin suosittelemme käyttämään rclonea. Datansiirron opastus löytyy sivulta Allas HPC -opas.
- Arkistoi tiedostot, joiden tulee olla saatavilla pidempään kuin laskentaprojektien elinkaaren ajan. Vaihtoehtoja tähän voivat olla esimerkiksi organisaatiosi omat tallennusjärjestelmät tai IDA-turvasäilytys tutkimusdatalle.
Tunnista, missä dataasi on
Jos sinulla on suuri määrä tiedostoja, eri kansioissa olevan datamäärän analysointi voi olla aikaa vievää ja myös kuormittaa tiedostojärjestelmää. Suosituksemme työkaluista, joilla voi näyttää kansioissa olevan datamäärän:
- Vältä käyttämästä
find-valintoja kuten-sizetai vastaavia - Vältä käyttämästä
du - Käytä
luetailfs find --lazy
CSC on kehittänyt likimääräisen työkalun nimeltä LUE (Lustre usage explorer) kansioissa olevan
datan määrän raportointiin. Lue LUE:n dokumentaatio ennen sen käyttöä.
lfs find --lazy sisältää joitakin reunatapauksia, joissa se voi olla yhtä huono kuin du tai epäonnistua
hiljaisesti oikeiden kokotietojen hakemisessa. Suorita man lfs-find saadaksesi lisäohjeita ja tietoa sen rajoituksista.
Note
Riippumatta siitä, mitä työkalua käytät, sinun ei koskaan pidä yrittää listata tai käsitellä kaikkia projektisi
tai scratch-kansiosi tiedostoja yhdellä komennolla. Sen sijaan komentojen tulisi kohdistua tiettyihin
alihakemistoihin, joissa on rajallinen määrä tiedostoja ja dataa. Käytetyn datan kokonaismäärä on
saatavilla komennolla csc-workspaces.
Tiedostojen automaattinen poisto
On olemassa käytäntö, jonka mukaan poistetaan tiedostot,
jotka ovat vanhempia kuin 180 päivää (scratch-kiintiö alle 5 TiB) tai 90 päivää (scratch-kiintiö
5 TiB tai enemmän) scratch-alueelta (ei projappl-alueelta), jotta levyllä säilyy vain aktiivisesti käytetty data
(tällä hetkellä käytössä vain Puhdissa).
Seuraavassa siivouksessa poistettavat tiedostot listataan niin sanottuihin "purge list" -tiedostoihin.
Nämä on jaettu projekteittain, ja ne löytyvät Lustresta jostakin alla olevista sijainneista.
Vain projektiryhmien jäsenet voivat käyttää projektihakemistoja.
Jos projektisi on juuri luotu, sillä ei ehkä vielä ole omaa alihakemistoa purge_lists-hakemistossa,
jolloin se ei osallistu automaattiseen siivoukseen.
/scratch/purge_lists/<PROJECT NAME>/path_summary.txt/fmi/scratch/purge_lists/<PROJECT NAME>/path_summary.txt(vain Puhdissa, FMI-projekteille)
Jos path_summary.txt-tiedostoa ei ole olemassa, projektissasi ei ollut yhtään tiedostoa, joka vastaisi
siivouskriteerejä, eikä siitä siis poisteta mitään. Osoittaakseen, että tiedosto puuttuu tarkoituksella,
CSC sijoittaa projektisi purge_lists-alihakemistoon tiedoston nimeltä nothing-to-remove-for-your-project,
joten tarkista myös tämän tiedoston olemassaolo.
Osana automaattista siivousprosessia tiedostojen nimet muuttuvat. Ennen siivouksen alkamista jokaisella
siivoukseen kuuluvalla projektilla on tiedosto nimeltä path_summary.txt.
Erityistapauksissa, joissa projekti on vapautettu tulevasta siivouksesta tai tarvitsee enemmän aikaa
tiedostojen siirtämiseen, ylläpitäjät nimeävät tiedoston uudelleen joksikin muuksi, yleensä
path_summary.txt-later-delete. Kun projekti on käsitelty automaattisessa siivouksessa,
tiedosto nimetään uudelleen muotoon path_summary.txt-stashed. Nämä tiedostot ovat edelleen projektien
luettavissa, joten listaan voi viitata myös siivouksen jälkeen.
Edellisen kierroksen tiedostot arkistoidaan, kun seuraava siivouskierros on alkamassa.
Voit tarkistaa, onko projektisi purge list päivitetty hiljattain, tarkistamalla sen viimeisimmän
muokkauspäivän. Alla olevassa esimerkissä tiedosto on muutaman kuukauden vanha, joten se on selvästi
edelliseltä siivouskierrokselta:
$ stat -c %y /scratch/purge_lists/project_2001659/path_summary.txt-stashed
2023-05-23 00:35:28.000000000 +0300
$ date +%F
2023-08-04
Toinen tiedosto, joka sijoitetaan jokaisen projektin purge_lists-hakemistoon, on total_size.txt.
Tämä tiedosto sisältää valmiiksi lasketun kokoarvion path_summary.txt-tiedostojen lukujen perusteella.
Tämä tiedosto on olemassa jokaiselle projektille, ja se luodaan automaattisesti, kun purge listit generoidaan.
Tiedosto voi näyttää tältä:
$ cat /scratch/purge_lists/project_2001659/total_size.txt
Total size: 798343125192 bytes = 743.515 GiB = 0.726 TiB
Näiden tietojen avulla voit arvioida, kuinka paljon aikaa datan varmuuskopiointi muualle saattaa vaatia,
jos haluat säilyttää kaiken purge listillä olevan datan Puhdin scratch-tiedostojärjestelmän ulkopuolella.
Tiedostojärjestelmätyökalut, joita CSC käyttää poistettavien tiedostojen listan tuottamiseen, luovat tiedostoja,
jotka ovat melko laveita ja vaikealukuisia. Käyttämällä seuraavassa osiossa kuvattua LCleaner-työkalua
käyttäjät voivat saada olennaiset tiedot käyttäjäystävällisemmässä muodossa.
LCleanerin ja selainkäyttöliittymän käyttö automaattisesti poistettavien tiedostojen tarkistamiseen
LCleaner on CSC:n kehittämä työkalu, jonka tarkoitus on auttaa sinua selvittämään, mitä tiedostoja projektissasi on kohdistettu automaattiseen poistoon.
Suorita kirjautumissolmuilla lcleaner --help, niin näet, mitä valintoja LCleaner tukee.
lcleanerin lisäksi Puhdin selainkäyttöliittymä tarjoaa graafisen työkalun "File Deletion Explorer (beta)" purge listien tarkasteluun. Tämä työkalu löytyy selainkäyttöliittymän "Tools"-pudotusvalikosta. Se voi visualisoida purge listin sisällön puukarttana, näyttää tiedostojen kokojakauman ja tehdä tiedostonimien pääteanalyysiä. Voit myös suodattaa tiedostoja tiedostopolun ja nimen perusteella sekä tulostaa suodatetut listat tekstitiedostoiksi myöhempiä komentorivitoimia varten.
LCleaner-esimerkkejä
Tarkista, onko projektillasi path_summary.txt-tiedosto
Ensimmäinen tarkistettava asia on, onko projektillasi todella path_summary.txt-tiedosto.
Kaikilla projekteilla ei automaattisesti ole sellaista, vaan vain niillä, joilla on jotain siivottavaa.
# Check if your project has a path_summary.txt file
my_project="project_2001659" # Replace with your own project name
ls "/scratch/purge_lists/${my_project:?}/"
# Or if you are in an FMI project on Puhti:
ls "/fmi/scratch/purge_lists/${my_project:?}/"
Jos näet hakemistossa path_summary.txt-tiedoston, jatka lukemista selvittääksesi, mitä tiedostoja
listalla on. Jos taas löydät tiedoston nimeltä nothing-to-remove-for-your-project,
projektissasi ei ole mitään, mikä poistettaisiin automaattisesti.
Jos haluat nopean, kopioi-ja-liitä-valmiin ratkaisun, käytä alla olevaa pientä skriptiä:
# Check all of the projects you belong to in one go:
for g in $(/usr/bin/groups) ; do
if [ -d "/scratch/$g" -a ! -L "/scratch/$g" ]; then
dir="/scratch/purge_lists/$g" ;
elif [ -d "/fmi/scratch/$g" ]; then
dir="/fmi/scratch/purge_lists/$g";
else
continue;
fi ;
echo -n "- Project '$g': ";
if [ ! -d "${dir:?}" ]; then
echo "doesn't have a purge_lists subdirectory. No files will be removed.";
continue;
fi ;
if [ -f "${dir:?}/path_summary.txt" ]; then
echo "has files that will be removed." ;
elif [ -f "${dir:?}/nothing-to-remove-for-your-project" ]; then
echo "is not included in the automatic cleaning.";
else
echo "is unclear, based on this script. Check with Service desk what to do.";
fi ;
done
Listaa tiedostosi
Saadaksesi yksinkertaisen listan kaikista purge listilläsi olevista tiedostopoluista, anna vain
path_summary.txt-tiedoston polku argumenttina:
# List all files in your purge list:
lcleaner "/scratch/purge_lists/${my_project:?}/path_summary.txt"
Jos path_summary.txt-tiedostosi on suuri (yli 100 MB), työkalun suorittaminen voi kestää jonkin aikaa.
Voit säästää aikaa ja resursseja tallentamalla tuloksen tulostiedostoon:
# List all files in your purge list into an output file in your home folder:
lcleaner --out-file ~/purge_list "/scratch/purge_lists/${my_project:?}/path_summary.txt"
# Alternatively, you can redirect the standard output with the bash shell:
lcleaner "/scratch/purge_lists/${my_project:?}/path_summary.txt" > ~/purge_list
# Check the output with less, or your preferred text editor
less ~/purge_list
Jos haluat etsiä tietyn tiedoston tai hakemiston, voit käyttää siihen grep-komentoa.
Voit etsiä suoraan path_summary.txt-tiedostosta, tai jos tallensit lcleaner-komennon tulosteen
johonkin yllä olevien komentojen avulla, voit käyttää sitä tiedostoa.
# Search for directories to check if they are included in the purge list
my_project="project_2001659" # Replace with your own project name!
grep "/scratch/${my_project:?}/important-dir" "/scratch/purge_lists/${my_project:?}/path_summary.txt"
# Or search the purge_list if you saved it:
grep "/scratch/${my_project:?}/important-dir" ~/purge_list
# If there are no matches, grep will not print anything.
Etsi listan suurimmat tiedostot
LCleanerissä on valinta tiedostojen lajitteluun koon mukaan. Tämän valinnan nimi on --sort-by-size, ja se
lajittelee aina laskevaan järjestykseen (eli suurimmat tiedostot ensin). Jos haluat nähdä tiedostojen koot
niitä tulostettaessa, käytä --csv-valintaa. Oletuksena tulostetaan vain tiedostopolut.
Voit myös rajata tulosteen sisältämään tietyn määrän tiedostoja parametrilla --limit N,
missä N on haluamasi rivien määrä.
# Print the file paths to be purged in size order:
lcleaner --sort-by-size "/scratch/purge_lists/${my_project:?}/path_summary.txt"
# Print the 10 biggest files:
lcleaner --sort-by-size --limit 10 "/scratch/purge_lists/${my_project:?}/path_summary.txt"
# Print the 10 biggest files, and their sizes in bytes:
lcleaner --sort-by-size --limit 10 --csv "/scratch/purge_lists/${my_project:?}/path_summary.txt"
Poista purge listillä olevat tiedostosi
Kannustamme sinua poistamaan tiedostot, joita et tarvitse, sen sijaan että odottaisit automaattisen
siivouksen tapahtumista. Jos haluat poistaa kaikki path_summary.txt-tiedostossa listatut tiedostot,
voit suorittaa seuraavan komennon:
Warning-label
Tämän osion komennot poistavat tiedostosi! Varmista, että olet tarkistanut poistettavien tiedostojen listan huolellisesti! Varmista myös, että olet varmuuskopioinut tiedostot, jotka haluat säilyttää (klusterin ulkopuolelle), ennen komentojen suorittamista. Tämä toimenpide on peruuttamaton.
Note
Poistoprosessi voi kestää huomattavan kauan (useita tunteja tiedostojen määrästä riippuen), joten
se kannattaa käynnistää screen- tai tmux-istunnossa, jotta voit katkaista SSH-istuntosi
poistamisen jatkuessa taustalla.
# Start a screen session
screen
# Delete all of the files on your purge list:
# Replace the "/path/to/my/path_summary.txt" with the path to your project's path_summary.txt
lcleaner -0 /path/to/my/path_summary.txt | xargs -0 -n 50 rm -vf --
# Then you can press "Ctrl + a" and then "d" to disconnect from the screen and keep
# the deletion running in the background.
# Run "screen -r" to reattach your screen.
# Close the screen session by typing "exit" in the shell.
Jos haluat poistaa vain osan tiedostoista, esimerkiksi tietyn hakemiston sisältä, voit käyttää esimerkiksi seuraavanlaista komentoa:
# Delete only files on the list which are inside /scratch/$my_project/delete-this-dir/
screen lcleaner -0 /path/to/my/path_summary.txt | grep -zZ "/scratch/${my_project:?}/delete-this-dir/" | xargs -0 -n 50 rm -vf --
# Ctrl + a, d to detach from the screen.
LCleanerin tulostusmuodot
Jos haluat nähdä poistettavaksi tulevien tiedostojen koot, voit käyttää joko JSON- tai CSV-muotoa.
Huomaa, että jos haluat käyttää useita tulostusmuotoja samanaikaisesti, sinun täytyy määrittää myös
tulostiedoston polku.
-0- tai --nullbyte-parametrien käyttö tulostaa tiedostopolut null-tavulla eroteltuina, mikä voi olla
hyödyllistä tiedostopolkujen välilyönteihin liittyvien ongelmien välttämiseksi.
# Print your purge list as CSV output with file paths and sizes.
# Note that the CSV format also prints a header row.
lcleaner --csv "/scratch/purge_lists/${my_project:?}/path_summary.txt"
# Print your purge list as JSON output with file paths and sizes:
lcleaner --json "/scratch/purge_lists/${my_project:?}/path_summary.txt"
# TIP: You can pipe the output into the jq program to prettify the output.
# The dot at the end is a mandatory argument to jq.
lcleaner --json "/scratch/purge_lists/${my_project:?}/path_summary.txt" | jq .
# Output both JSON and CSV into purge_list.json and purge_list.csv:
lcleaner --json --csv --out-file purge_list "/scratch/purge_lists/${my_project:?}/path_summary.txt"
# Output file paths separated by null bytes:
lcleaner -0 "/scratch/purge_lists/${my_project:?}/path_summary.txt"
# Usually you will want to pipe null-byte-separated output into "xargs -0" and do some
# further processing with it. For example like this:
lcleaner -0 --limit 3 "/scratch/purge_lists/${my_project:?}/path_summary.txt" \
| xargs -0 -Ifilepath echo "I should run: rm -vf 'filepath'"
Tulosteesimerkkejä:
# Plain text:
[westersu@puhti-login11 ~]$ lcleaner path_summary.txt | head -3
/scratch/westersu/my-old-files/file1
/scratch/westersu/my-old-files/file2
/scratch/westersu/my-old-files/file3
# CSV:
[westersu@puhti-login11 ~]$ lcleaner --csv path_summary.txt | head -4
"path","size"
"/scratch/westersu/my-old-files/file1","1704"
"/scratch/westersu/my-old-files/file2","452"
"/scratch/westersu/my-old-files/file3","4951"
# JSON, piped into jq:
[westersu@puhti-login11 ~]$ lcleaner --json path_summary.txt | jq .
{
"lustre_files": [
{
"size": 1704,
"path": "/scratch/westersu/my-old-files/file1"
},
...
]
}
# Null byte xargs:
[westersu@puhti-login11 ~]$ lcleaner -0 --limit 3 path_summary.txt \
> | xargs -0 -Ifilepath echo "I should run: rm -vf 'filepath'"
I should run: rm -vf '/scratch/westersu/my-old-files/file1'
I should run: rm -vf '/scratch/westersu/my-old-files/file2'
I should run: rm -vf '/scratch/westersu/my-old-files/file3'
Huomioita LCleanerin käytöstä
Tässä osiossa kuvataan joitakin asioita, jotka voivat olla hyödyllisiä tietää LCleanerin toiminnasta tai siitä, miksi yllä olevat komentoesimerkit on rakennettu juuri kyseisellä tavalla.
- Joskus
lcleanertulostaa virheitä riveistä, joita se ei pystynyt jäsentämään. Jos virheitä on, loppuun tulostetaan varoitus, joka kertoo, että virheitä oli vähintään yksi. Varoitukset ovat esimerkiksi muotoa: "We detected N errors during the execution. Please check the logs, for more information!" Virheet kertovat, millä rivinumerolla ongelmallinen teksti oli, joten voit mennä tarkistamaan sen käsin.- Vinkki: Jos haluat tulostaa vain tietyn rivin, esimerkiksi
path_summary.txt-tiedoston rivin 123, voit käyttää tätä komentoa:sed -n 123p /path/to/path_summary.txt
- Vinkki: Jos haluat tulostaa vain tietyn rivin, esimerkiksi
- Jos haluat tallentaa
lcleaner-lokituksen, voit ohjata vakiovirran tiedostoon. Tästä voi olla hyötyä, jos kohtaat ongelmia ja haluat apua tilanteen vianmääritykseen.lcleaner --log-level debug path_summary.txt 2> ~/lcleaner-debug-$(date +%s).log
-0-valinnan käyttö sekälcleaner- ettäxargs-komennon kanssa tämän sivun esimerkkikomennoissa on suositeltavaa, jotta vältetään ongelmat tiedostonimissä olevien välilyöntien kanssa.- LCleanerissä on myös joitakin ylläpidollisia toimintoja, joita ei ole tarkoitettu tavallisille käyttäjille
ja jotka joissakin tapauksissa eivät toimi ilman korotettuja oikeuksia. Kaikki, missä mainitaan
--admin-mode-lippu, voidaan turvallisesti jättää huomiotta.
LCleanerin vianmääritys
Jos huomaat ohjelmavirheitä, ilmoita niistä CSC:n Service Deskille.