Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

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 tarkoitukseen 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 kiintiöitä enemmän 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 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 suuri määrä pieniä tiedostoja. Nämä työkalut tekevät Altaan käytöstä turvallisempaa ja voivat helpottaa datan hallintaa. Erittäin suuriin datansiirtoihin suosittelemme käyttämään rclonea. Datansiirron opastus löytyy kohdasta Allas HPC -opastus.
  • 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, turvallinen tutkimusdatan säilytyspalvelu.

Sen tunnistaminen, missä sinulla on dataa

Jos sinulla on suuri määrä tiedostoja, sen analysointi, kuinka paljon dataa eri kansioissa on, voi viedä paljon aikaa ja kuormittaa myös tiedostojärjestelmää. Suosituksemme työkaluiksi, jotka voivat näyttää kansioissa olevan datan määrän:

  • Vältä käyttämästä find-valintoja kuten -size tai vastaavia
  • Vältä käyttämästä du
  • Käytä lue:ta tai lfs 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 komennot tulee suorittaa tietyille alihakemistoille, joissa on rajallinen määrä tiedostoja ja dataa. Käytetyn datan kokonaismäärä on saatavilla csc-workspaces-komennolla.

Tiedostojen automaattinen poistaminen

On olemassa käytäntö, jonka mukaan scratch-alueelta (poislukien projappl) 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), jotta levyllä säilyy vain aktiivisesti käytetty data (tällä hetkellä toteutettu vain Puhdissa).

Seuraavassa siivouksessa poistettavat tiedostot listataan niin sanottuihin "purge list" -tiedostoihin. Ne 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, projektillasi 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 olisi vastannut 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 kuin siivous on alkanut, 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, joka perustuu path_summary.txt-tiedostojen lukuihin. 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 voi 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, tuottavat tiedostoja, jotka ovat melko monisanaisia 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äminen automaattisesti poistettavien tiedostojen tarkistamiseen

LCleaner on CSC:n kehittämä työkalu, jonka tarkoitus on auttaa sinua selvittämään, mitä tiedostoja projektissasi on merkitty automaattisesti poistettaviksi.

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ääteanalyysin. 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ä-kelpoisen 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 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ä tiettyä tiedostoa tai hakemistoa, voit käyttää siihen grep:iä. Voit etsiä suoraan path_summary.txt-tiedostosta tai, jos tallensit lcleanerin tulosteen johonkin yllä olevilla komennoilla, 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

LCleanerissa 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 tapahtuvan. 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 säilytettävät tiedostot (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 samalla kun poisto jatkuu.

# 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ä poistettaviksi merkittyjen 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. Parametrien -0 tai --nullbyte käyttö tulostaa tiedostopolut null-tavulla eroteltuina, mikä voi olla hyödyllistä, jotta tiedostopoluissa olevat välilyönnit eivät aiheuta ongelmia.

# 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ää siitä, miten LCleaner toimii tai miksi yllä olevat komentoesimerkit on rakennettu niin kuin ne on.

  • Joskus lcleaner tulostaa virheitä riveistä, joita se ei pystynyt jäsentämään. Jos virheitä on, lopussa tulostetaan varoitus, joka kertoo, että vähintään yksi virhe tapahtui. 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
  • Jos haluat tallentaa lcleanerin lokituksen, voit uudelleenohjata 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:n käyttöä sekä lcleanerin että xargs:n kanssa tämän sivun esimerkkikomennoissa suositellaan, jotta vältetään ongelmat tiedostonimissä olevien välilyöntien kanssa.
  • LCleanerissa 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. Kaiken, missä mainitaan --admin-mode-lippu, voi turvallisesti jättää huomiotta.

LCleanerin vianmääritys

Jos huomaat virheitä tai bugeja, ilmoita niistä CSC:n Service Deskille.

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta