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.

Swift-asiakasohjelma

Pythonin Swift-asiakasohjelma on komentorivityökalu oliotallennusjärjestelmien, kuten Allaksen, käyttöön. Jos käytät Allasta Puhdissa tai Mahdissa, kaikki tarvittavat paketit ja ohjelmistot on jo asennettu.

module load allas
Avaa yhteys Altaaseen:
allas-conf

Katso lisätietoja ja lisävalintoja kohdasta allas-conf.

Tämä luku sisältää ohjeet seuraaviin toimintoihin:

Swift-komento Toiminto
post Luo ämpäri
upload Lataa palveluun objekti
list Listaa objektit ja ämpärit
download Lataa objektit ja ämpärit
copy Siirrä objekti
delete Poista objektit tai ämpäri
download --all Lataa koko projekti
delete --all Poista koko projekti
md5sum Hae tarkistussumma
stat Näytä metadata
stat --meta Lisää metadataa
tempurl Luo väliaikainen URL
post -r, -w, --read-acl Hallitse käyttöoikeuksia
upload --use-slo Lataa palveluun yli 5 GB:n tiedostoja

Voit myös asentaa ja käyttää Swiftiä CSC:n laskentaympäristön ulkopuolella. Varmista, ettei Swift-versiosi ole vanhentunut, sillä vanhemmat Swift-versiot eivät välttämättä toimi Allaksen kanssa.

Luo ämpäreitä ja lataa objekteja palveluun

Luo uusi tyhjä ämpäri:

swift post <new_bucket_name>

Luo uusi ämpäri ja lisää siihen tiedosto:

swift upload <new_bucket_name> <file_name>

Lisää tiedosto olemassa olevaan ämpäriin:

swift upload <old_bucket_name> <file_name>
Huom: Tämä voi aiheuttaa varoituksen "409 Conflict: BucketAlreadyExists", mutta se ei välttämättä tarkoita, että lataus palveluun epäonnistui. Jos seuraavalla rivillä näkyy tiedoston nimi, tiedosto ladattiin onnistuneesti olemassa olevaan ämpäriin.

$ swift upload my_fishbucket my_fish.jpg
Warning: failed to create container 'my_fishbucket': 409 Conflict: BucketAlreadyExists
my_fish.jpg

Listaa objektit ja ämpärit

Listaa kaikki projektiin kuuluvat ämpärit:

$ swift list
my_fishbucket
my_bigfishes
Listaa ämpärin sisältö:
$ swift list my_fishbucket
my_fish.jpg
salmon.jpg
bass.png

Lataa objekteja ja ämpäreitä

Lataa objekti:

swift download <bucket_name> <file_name>
Jos haluat nimetä objektin uudelleen latauksen yhteydessä, voit lisätä komennon loppuun -o new_name:
swift download <bucket_name> <file_name> -o <new_name>
Lataa kokonainen ämpäri:
swift download <bucket_name>

Siirrä objekteja

Voit kopioida dataa ämpäristä toiseen komennolla swift copy. Alla oleva komento kopioi tiedoston file.txt ämpäristä bucket1 ämpäriin bucket2.

swift copy --destination /bucket2 bucket1 file.txt
Huom: Jos bucket2-nimistä ämpäriä ei ole, Swift luo uuden samannimisen ämpärin. Jos bucket2-niminen ämpäri kuitenkin on jo olemassa, Swift väittää silti luoneensa uuden, vaikka se vain kopioi tiedoston olemassa olevaan ämpäriin:
$ swift copy --destination /other_bucket my_bigfishes bigfish.jpg
created container other_bucket
my_bigfishes/bigfish.jpg copied to /other_bucket/bigfish.jpg
$ swift list other_bucket
bigfish.jpg
other_file.txt

Nimeä tiedosto uudelleen kopioinnin yhteydessä:

$ swift copy --destination /new_bucket/newname.jpg my_fishbucket my_fish.jpg
created container new_bucket
my_fishbucket/my_fish.jpg copied to /new_bucket/newname.jpg

Lisätietoja komennosta swift copy on OpenStackin dokumentaatiossa.

Poista objekteja ja ämpäreitä

Poista objekteja ja ämpäreitä komennolla swift delete:

swift delete <bucket_name> <object_name>
Esimerkiksi:
$ swift delete my_fishbucket useless_fish.jpg
useless_fish.jpg

Toisin kuin selainkäyttöliittymässä ja s3cmd:ssä, Swiftillä voit poistaa kokonaisen ämpärin kerralla:

swift delete <my_old_bucket>
Esimerkiksi:
$ swift delete old_fishbucket
old_fish.png
useless_salmon.jpg
too_tiny_bass.jpg
$ swift list old_fishbucket
Container u'old_fishbucket' not found
Huomaa: Tämä poistaa ämpärin pysyvästi, ja data menetetään. Varmista ennen tämän komennon käyttöä, ettet enää tarvitse dataa tai että sinulla on siitä kopio.

Lataa tai poista projekteja

Lataa koko projekti:

swift download --all

Poista koko projekti:

swift delete --all
Huomaa: Ole varovainen tämän komennon kanssa, sillä se poistaa projektin koko sisällön. Varmista ennen tämän komennon käyttöä, ettet enää tarvitse dataa tai että sinulla on siitä kopio.

Näennäiskansiot ja tarkistussummat

Jos haluat tarkkailla, onko objekti muuttunut, käytä tarkistussummaa komennolla md5sum.

Näennäiskansioita voidaan käsitellä lisäämällä näennäiskansion nimi tiedostonimen eteen: my_pseudo_folder_name/my_file

Luo pictures-niminen näennäiskansio ämpäriin my_bigfishes ja lisää siihen objekti bass.png:

$ swift upload my_bigfishes/pictures bass.png
pictures/bass.png

Alla olevassa esimerkissä tiedosto nimeltä salmon.jpg ladataan palveluun fishes-nimiseen näennäiskansioon ämpärin my_fishbucket sisällä. Tiedosto ladataan sitten palvelusta.

$ md5sum salmon.jpg
22e44aa2b856e4df892b43c63d15138a  salmon.jpg
$ swift upload my_fishbucket/fishes salmon.jpg
fishes/salmon.jpg
$ swift list my_fishbucket
fishes/salmon.jpg
my_fish.jpg
$ swift download my_fishbucket fishes/salmon.jpg -o my_renamed_salmon.jpg
fishes/salmon.jpg [auth 0.664s, headers 0.925s, total 0.969s, 3.605 MB/s]
$ md5sum my_renamed_salmon.jpg
22e44aa2b856e4df892b43c63d15138a  my_renamed_salmon.jpg
Huom: Objektin salmon.jpg ja uudelleennimetyn version my_renamed_salmon.jpg tarkistussummat ovat samat, koska tiedosto on sama eikä ole muuttunut.

Metadatan hallinta

Määritä objektille metadata:

swift post my_fishbucket my_fish.jpg --meta foo:bar

Näytä ämpärin tiedot:

$ swift stat my_fishbucket
                      Account: AUTH_$PROJECT_UUID
                    Container: my_fishbucket
                      Objects: 4
                        Bytes: 2162342
                     Read ACL:
                    Write ACL:
                      Sync To:
                     Sync Key:
                Accept-Ranges: bytes
                   X-Trans-Id: txUUID-cpouta-production-kaj
             X-Storage-Policy: default-placement
X-Container-Bytes-Used-Actual: 1167360
                  X-Timestamp: 1516776076.95812

Aseta ämpäri maailmanlaajuisesti vain luku -tilaan (tee sisältö näkyväksi URL-osoitteessa: a3s.fi/bucket_name/object_name) oletusasetuksen (projektille yksityinen) sijaan:

swift post my_fishbucket --read-acl ".r:*"

Lisätietoja käyttöoikeuksien hallinnasta on kohdassa Anna toiselle projektille luku- ja kirjoitusoikeus ämpäriin.

Lisää tiedoston tietoja:

$ swift stat my_fishbucket fishes/salmon.jpg
         Account: AUTH_$PROJECT_ID
       Container: my_fishbucket
          Object: fishes/salmon.jpg
    Content Type: image/jpeg
  Content Length: 63220
   Last Modified: Wed, 24 Jan 2018 10:17:03 GMT
            ETag: a38f8db198e3fea43c83c465ffb0283b
Meta S3Cmd-Attrs: atime:1516788402/ctime:1513681753/gid:$LOCALGID/gname:$LOCALGROUP/md5:a38f8db198e3fea43c83c465ffb0283b/mode:33188/mtime:1513681747/uid:$LOCALUID/uname:$LOCALUSER
   Accept-Ranges: bytes
     X-Timestamp: 1516789023.84380
      X-Trans-Id: tx0000000000000000001d6-q-q-cpouta-production-kaj

Huomaa, että yllä oleva tiedosto ladattiin palveluun s3cmd-asiakasohjelmalla, ja siksi siinä on lisämetadata S3Cmd-Attrs verrattuna tiedostoon, joka on ladattu palveluun Swiftillä tai S3:lla. ETag on hash, kun tarkastelet tiedoston tietoja Poudan hallintapaneelissa.

Anna toiselle projektille luku- ja kirjoitusoikeus ämpäriin

Anna projektille project1 lukuoikeus ämpäriin my_fishbucket:

swift post my_fishbucket -r "project1:*"

Kirjoitusoikeus voidaan antaa vastaavasti korvaamalla -r (read) parametrilla -w (write):

swift post my_fishbucket -w "project1:*"

Projektin nimen jälkeinen merkki * määrittää, että kaikki projektin jäsenet saavat oikeudet.

Vaihtoehtoisesti voit antaa luku- ja kirjoitusoikeuden vain tietyille toisen projektin jäsenille:

swift post my_fishbucket -r "project2:member1"
swift post my_fishbucket -w \
   "project3:member1,project3:member2,project5:member1,project6:*"

Huomaa: Jos olet myöntänyt käyttöoikeuksia tietyille projekteille, jaettu projekti julkiseksi ja sitten uudelleen yksityiseksi asettaminen poistaa aiemmat käyttöoikeudet.

Jos annat toiselle projektille -w-oikeuden, toisen projektin jäsenet voivat ladata tiedostoja palveluun ämpäriisi ja poistaa tiedostojasi. Sinulla ei kuitenkaan ole pääsyä ladattuihin tiedostoihin, ennen kuin joko sinä tai lähettäjä jakaa ämpärin projektillesi:

swift post <your_bucket_name> -r "your_project:*"

Esimerkiksi:

swift post my_fishbucket -r "project_1234:*,project_4567:*"

Vaihtoehtoisesti voit asettaa projektin julkiseksi ja käyttää sitten tiedostoa.

Yli 5 GB:n tiedostot

Swiftin yksittäisen objektin kokoraja on 5 GiB. Jotta voit ladata tätä suurempia tiedostoja palveluun, sinun on luotava suuri objekti, joka koostuu pienemmistä segmenteistä. Tähän voit käyttää Swiftiä niin sanotun Static Large Objectin (SLO) lataamiseen palveluun.

Yritä ladata suuri tiedosto palveluun:

$ md5sum /tmp/6GB.zero
9e6a77a2d5650b2e2a710a08e9e61a81  /tmp/6GB.zero
$ stat /tmp/6GB.zero
File: '/tmp/6GB.zero'
Size: 6424625152      Blocks: 12548104   IO Block: 4096   regular file
...
$ swift upload my_bigfishes /tmp/6GB.zero
Object PUT failed: https://a3s.fi:443/swift/v1/my_bigfishes/tmp/6GB.zero 400 Bad Request   EntityTooLarge

Se epäonnistuu viestillä EntityTooLarge, joten käytä sen sijaan:

$ swift upload my_bigfishes --use-slo --segment-size 1G /tmp/6GB.zero
tmp/6GB.zero segment 3
tmp/6GB.zero segment 5
tmp/6GB.zero segment 1
tmp/6GB.zero segment 0
tmp/6GB.zero segment 4
tmp/6GB.zero segment 2
tmp/6GB.zero

Tämä luo uuden ämpärin:

$ swift list |grep my_bigfishes
my_bigfishes
my_bigfishes_segments

Tässä tapauksessa kohdeämpäri (my_bigfishes) sisältää vain edustaobjektin, joka sisältää tiedon siitä, mitkä segmentit segmenttiämpärissä (my_bigfishes_segments) muodostavat tallennetun tiedoston. Edustaobjektiin kohdistetut toiminnot heijastuvat automaattisesti segmentteihin. Tavallisesti käyttäjien ei tarvitse käsitellä segmenttiämpäreitä lainkaan, eikä näiden ämpäreiden sisällä olevia objekteja pidä poistaa tai muokata.

Lataa koko 6GB.zero palvelusta:

$ swift download my_bigfishes tmp/6GB.zero -o /tmp/6GB.zero
tmp/6GB.zero [auth 0.594s, headers 0.881s, total 74.467s, 86.969 MB/s]
$ md5sum 6GB.zero
9e6a77a2d5650b2e2a710a08e9e61a81  6GB.zero

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta