You are currently viewing Ulkoinen USB-kovalevy Raspberryn käyttöön

Ulkoinen USB-kovalevy Raspberryn käyttöön

USB-liitännässä olevat ulkoiset kovalevyt ja muistitikut eivät näy suoraan linuxissa, vaan ne täytyy ottaa erikseen käyttöön. Joten aivan yhtä mukavaa ympäristöä kuin mitä Windowsin plug’n’play on ei ole saatavilla. Tai ehkä desktop-versiossa on, mutta serverillä ei. Toisaalta, tässä on kyse myös asennevirheestä. Windowsin resurssinhallinta esittää ulkoiset massamuistit nimensä ja kirjaintunnuksensa mukaan. Linuxit tekevät saman, mutta esitystapa on erilainen, koska ylipäätään massamuistien käsittely on erilaista.

Olen kuullut sanottavan, että Windowseista saapuneilla on vaikeaa ymmärtää miten linuxien kovalevypolitiikka toimii – vaikka enää ei saisi edes puhua kovalevyistä, vaan massamuisteista, koska USB-tikut ja muistikortit eivät toiminnaltaan, funktioltaan, eroa mitenkään niistä, jotka mielletään nimikkeeseen kovalevyt kuuluviksi.

Aidosti kuuluisi sanoa, että PC-taustaisilla on vaikeaa. Ei tapa nimetä osiot kirjaimilla (C:, D: jne.) ole Microsoftin keksimä, vaan oli jo vanhassa DOS:ssa (ja sitäkin ennen) ennenkuin Gates ja kumppanit edes haaveilivat ikkunointiin perustuvasta graafisesta käyttöjärjestelmästä. Voidaan sanoa, että kirjainajattelu on tullut meille jokaiselle, jos ei ihan istukan kautta, niin äidinmaidossa kuitenkin.

Siitä johtuu se, että ei vaikeus ymmärtää linuxien osiointia ja osioiden mounttaamista, asettamista, johonkin sisällön tai kontekstien mukaiseen yhteyteen, ole mitenkään PC-ihmisten etuoikeus. Tehkää nopea hakusanojen vertailu. Takaan, että kysymykset kovalevyjen ja USB-muistien ottamisesta käyttöön linuxeissa on, jos ei ihan ykkösenä, niin taatusti TOP-5:ssä – ja ne kysymykset tulevat pingviiniyhteisöstä.

TL;DR

Lyhyesti nopein tapa:

  • sudo -s
  • apt install usbmount
  • /lib/systemd/system/systemd-udevd.service – muuta PrivateMounts=no
  • /etc/usbmount/usbmount.conf – muuta FS_MOUNTOPTIONS="-fstype=vfat,umask=0000"
  • reboot
  • komento lsusb näyttää mitä on missäkin, vastaava on mount | grep media

Kovojen murros

Raspberry Pi on mahtava mikrotietokone (näin ne merkitykset muuttuvat). Tai en minä tiedä kuinka mikro se on muuta kuin fyysiseltä kooltaan. Otin moisen ihmeen vähän aikaa sitten käyttöön (aikasidonnaiset ilmaisut ovat vaarallisia… jospa luet tätä jonkun vuoden kuluttua ja minulle onkin jo laivasto Raspberryjä) ja nyt se on hakemassa rooliaan sisäverkon serverinä ja yleispalvelijana.

Sillä on yksi puute. Siinä ei ole massamuistia. Tai on, sen verran kuin mitä siinä käytettävässä SD-muistikortissa on, mutta ei mitään teratolkulla. Massamuistien koko on tietysti aina suhteellinen käsitys. Aivan vähän aikaa sitten katsottiin säälivästi, jos koneen sisällä oli vain teran verran tallennustilaa ja kyseltiin, että miten oikein pärjäät. SSD-levyt tulivat markkinoille ja yhtä äkkiä 256 gigaa olikin normaalia. Aika monissa halvemman hintaluokan läppäreissä on 128 gigaa ja törmäsin yhteen, jota myytiin 64 gigan levyllä.

Syy levyjen pienemiseen oli hinta. SSD:t ovat kalliita. Aikoinaan, kun modeemien nopeus oli huimaavat 56,6 kiloa, niin Nokia toi markkinoille uuden keksinnön: mobiilidatan. Nopeus oli 9600. Se oli karsea heikennys ja kalenteri pyörähti vuosia taaksepäin. Silti heikennystä pidettiin parannuksena. Sama tapahtui massamuisteille. Toki SSD on nopeampi, mutta suurin osa nopeutta hehkuttavista eivät aidosti sitä nopeutta mihinkään tarvinneet. Mutta tallennustilan koko romahti ja tuli lähes pakolliseksi ostaa ulkoinen levy.

Nyt ulkoisista massamuisteista on tullut uusi normi. Toki niissä on etunsa, mutta myönnetään silti tosiasiat. Eivät ne ole käytössä siirrettävyyden takia. Ne ovat käytössä siksi, että koneissa ei ole riittävästi tallennustilaa. Joten ei Raspberryn massamuistinsa vähyyttä tarvitse hävetä – se on samassa seurassa Macien ja PC-koneiden kanssa. Servereillä kovo vasta kallista onkin. kalliimpaa kuin kuluttajamarkkinoilla.

Jos Raspberry Pi ei ole vimpainkäytössä, vaan toimii ns. tietokoneena, niin siihen on pakko liittää ulkoinen massamuisti. Joka muuta väittää, niin ei tee koneellaan kuin pilvihommia tai selailee nettiä, ei muuta. Siksi on kerrattava miten Raspberryn saa keskustelemaan USB-muistien kanssa.

Ohjeet on sidottu Raspberryyn ja Ubuntuun, mutta aidosti tämä on eräällä tavalla universaalia pingviiniasiaa. Tietääkseni aivan jokaisessa linuxissa distrosta ja konelaatikon ulkomuodosta piittaamatta asiat tehdään tismalleen samoin.

Ongelman tynkää on hieman siinä, että nyt sokea yrittää olla oppaana. Minä olen hyvin vahvasti PC-taustainen ja minulla on suunnattomia vaikeuksia sisäistää miten linuxit muistejaan hallitsevat. Siitäkin huolimatta, että kun kuorrutus otetaan pois, niin perusta on tismalleen sama – joten ymmärtämättömyys saattaa juoruta enemmänkin asenteesta kuin asiasta. Joten jos törmäät johonkin selvään väärinymmärrykseen, niin olet enemmän kuin tervetullut korjaamaan: kommentointi on auki.

En takaa ohjeiden toimivuutta. En nyt, en huomenna enkä ensi vuonna. Mutta tätä kirjoitettaessa jokainen esitetty asia on toiminut minulla Raspberry Pi 4 B:ssä, jossa on Ubuntu 20.04 serveriasennuksena.

Mount-pisteen idea

Se mihin massamuisti mountataan, on suurin ymmärryshidaste. Se, että valitetaan automaatin puuttumisesta, että joutuu erikseen liittämään ja taas erikseen poistamaan, on kiukuttelua käytettävyydestä. Ei USB-muistien automaattinen liittäminen ja järjestelmän asettaminen niin, että käyttäjä voi poistaa tikun ilman erillistä eject-toimintoa malliin DVD-asemat, niin vanha keksintö ole. Windowsiin se tuli hieman aikaisemmin kuin linux-jakelujen työpöytäversioihin.

Nuo ovat kuitenkin kaksi eri asiaa: miksi tehdään ja mikä sopii käyttökokemukselle.

Windows miettii massamuisteja

Windows/DOS:n tapa on helppo ymmärtää. Asemat ovat järjestyksessä C:stä eteenpäin, ellei sitten ole erikseen mountannut jotain verkkoasemana toimivaa, esimerkiksi routerin portissa kiinni olevaa massamuistia, jollekin muulle kirjaimella. Tämä on asia, joka säännönmukaisesti unohdetaan, kun kiukutellaan linuxien mount-politiikasta: Windows tekee aakkosiin liittyvän mountin aivan samalla tavalla, ja yleensä automaattisesti vain ns. paikallisille asemille. Aidosti siis eroa ei oikeastaan ole.

Aakkoset ovat helppoja, koska niihin on totuttu. Me tiedämme, että järjestelmä on aina C-asemalla. Jos on D-asemakin, niin siellä on sitten käyttäjän omia asioita. Se tarkoittaa myös sitä, että jos C-asema on täynnä, niin D-asemalta ei saada kovinkaan helposti tyhjää tilaa siirrettyä C:lle. On se mahdollista, mutta siinä on riskinsä tiedostojärjestelmän hajoamisesta. Lisäksi tiedän, että linuxin osiointi on helpompi neuvoa IT-ummikolle, kuin alkaa neuvomaan miten Windowsissa osioiden kokoa muutetaan.

Windows laittaa massamuistit käyttäjälle esitettävään järjestykseen niiden fyysisen olomuodon mukaan. Toki isosta levystä voidaan lohkoa aliosioita, ja tehdä yhdestä isosta fyysisestä levystä vaikka C-, D- ja E-osiot, mutta silti ne ovat samassa paketissa ja seuraava fyysinen levy lähtee sitten F:stä eteenpäin. Tästä johtuen osiot eivät liity mitenkään siihen mihin tallennustilaa käytetään.

Linux miettii hakemistoja

Linuxeissa lähestymistapa on toinen. Fyysisiä massamuisteja voi olla useita ja niitä on vielä osioitu mielin määrin. Niilläkin on yksilöivä tunnus, samaan tapaan kuin Windowsin aakkoset, mutta rakenne on enemmänkin järjestysnumeron kaltainen. Ensimmäinen levy on sda, seuraava on sdb, sitten on sdc jne. Jos niitä on osioitu, niin se ilmaistaan numerolla, esimerkiksi sda1 ja sda2 – silloin meillä on yksi fyysinen massamuisti sda, jossa on kaksi osiota, sda1 ja sda2.

Windowsin aakkosten mukaankin muistaminen, että mitä tietoa on missä, on tuskaa. Jos pitäisi vielä alkaa ihmettelemään, että olivatko ne lomakuvat kovalevyllä sda1 vai ehkä sdc3 olisi jo aivan mahdotonta. Siksi nuo ovatkin järjestelmän käyttämiä tunnuksia, ei ihmisille. Niiden olemassaolo ja merkitys on ymmärrettävä silloin kun tekee järjestelmän, jota ihminen voi käyttää.

Windows laittaa osiot peräkkäin ja se siitä, vaihtoehtoa ei ole, niin nyt saavutaan linuxin kauneuteen ja miksi mount-piste on niin hieno keksintö – ja miksi se on samalla kaikessa yksinkertaisuudessaan niin vaikea. Linuxissa kovalevyille annetaan paikka hakemistorakenteessa, jossa niitä voidaan käyttää yhdessä, erikseen tai melkein jopa päällekkäin.

Windowsissa on kovalevy, johon tehdään hakemistoja. Linuxissa on hakemisto, johon laitetaan kovalevyjä.

Meillä voi olla yksi kovalevy, jossa on koko järjestelmä, mukaanlukien käyttäjien kotihakemistot eli /home ja sen alihakemistot. Levy alkaakin täyttymään, koska käyttäjät siirtävät kaikki kameroidensa 50Mpix lomakuvat ja tuntitolkulla parisuhdeajan 4K-tarkkuuden videoita. Linuxissa ylläpitäjä huokaisee ja käy ostamassa kaksi isoa massamuistia. Toisen hän mountaa hakemistolle /home ja koska on mukava kaveri, niin toisen mount-piste on /home/$USER/media. Käyttäjät eivät huomaa mitään muuta kuin että kotihakemistoon ilmestyi uusi hakemisto media.

Windowsissa olisi tehty kova operaatio ja siirretty kaikki uudelle massamuistille. Tai sitten olisi asennettu uusi rinnalle ja lähetetty viesti kaikille, että olisitteko ystävällisiä ja olisitte tulevaisuudessa lataamatta kuvianne ja videoitanne omaan koti-hakemistoon, vaan käyttäisitte tuliterää media-levyä, joka löytyy tunnuksella H:.

Mount on vain sen hakemiston nimi, jonka tallennuspaikka on se yksi määrätty massamuisti tai sen osio.

Käyttäjä harvemmin miettii

Mountin vaikeus on siinä, että sen olemassaoloa ei hahmota. Windowsin resurssinhallinnassa on selvät kirjaimet ja massamuistien nimet. Linuxissa vain hakemisto. Se tuo mukanaan sen, että kun liittää, mounttaa, massamuistin, niin pitäisi miettiä mihin sitä käytetään ja miksi. Windowsissa ei tarvitse miettiä, koska ei voi. Se on aina yksi iso viipale aakkosissa.

Siksi on mahdollista mountata muistitikku esimerkiksi vain nimelle /usb/mun_muistitikku tai sen voikin mountata hakemistoon /home/pena/kuvat – ihan miten haluaa ja miten parhaaksi tahtoo. Windowsissa se on aina ja poikkeuksetta uusi aakkonen omana levynään.

Iso osa vastahangasta ymmärtää mount kumpuaa taatusti komentoriveiltä. Graafisella työpöydällä pystyy hahmottamaan paremmin mitä on missä, koska hakemistorakenteen näkee yhdellä silmäyksellä pysty-, vaaka- ja syvyystasossa. Shellissä ei näe. Samasta syystä webmaailman mobiilisivupohjien hampurilaisvalikko on niin suuri rikos kaikkea käytettävyyttä vastaan – mutta ei siitä tällä kertaa.

Aina kun tökkää muistitikun tai ison levyn kaapelin Raspberryn USB-porttiin, niin pitäisi olla hahmotettuna

  • mihin tarkoitukseen muistia käytetään
  • missä sen järkevin paikka olisi, jos/kun se onkin hakemisto

 

Asiat voi tehdä siististi. Tai sitten ei.

 

Nopea USB-muistin mounttaaminen

Minä en tiedä miten Raspberrylle säädetyt distrot toimivat suhteessa siihen mitä ns. perusasennettu Ubuntu serverikäytössä tekee. Olen loppukäyttäjä, en sinällään harrasta tietokoneita tietokoneina – ainoastaan sitä mitä niillä saadaan aikaiseksi. Ymmärtääkseni kaikki jakelut, oikeammin niiden asennettu työpöytä, osaa käyttää luonnostaan USB-muisteja – mounttaa ne ilman ihmettelyjä ja osaa esittää sisällön siellä missä sitten hakemistoja näytetäänkään. Jos ja kun on noin, niin tuskin luet tätä juttua muusta kuin uteliaisuudesta.

Tuo vastuunpakoilu tarkoittaa myös sitä, että en vaivautunut vilkaisemaan edes Ubuntu 20.04 serveriasennuksen osaamista, vaikka asennettu levykuva ei ollut yleinen versio, vaan nimenomaan Raspberrylle räätälöity. Joten olisi ollut mahdollista, että Raspberryn erikoisominaisuus keskustella massamuistien kanssa USB:n kautta oli jo valmiiksi huomioitu.

Tai sitten ei. Anteeksi kaikki insinöörit, mutta insinöörien tapaan toteuttaa asioita ei yleensä liity loppukäyttäjän miettiminen ja siksi niin monet laitteet ja ohjelmat ovat käytettävyydeltään surkeita. Tarkoittaa sitä, että jos minä osaisin säätää jakelun Raspberrylle sopivaksi, niin USB-massamuistien mounttaaminen rootille olisi defaulttina käytössä myös servereillä. Sille olisi jopa selkeä käyttöliittymä. Ei merkkipohjainen shell estä käyttöliittymien tekemistä.

Syy tarpeeseen on tällä kertaa selvä. USB on ainoa mahdollinen tapa liittää yhtään mitään Raspberryyn.

Toki voidaan esittää väitteitä aiheesta käyttäjä päättää ja käyttäjä tekee mitä tarvitsee, tai että kyseessä on turvallisuusriski. Silti uskallettiin tehdä serveriasennukseenkin oletuskäyttäjä ubuntu, jonka sudokelpoinen salasana on ubuntu. Minulla on myös hieman vaikeuksia ymmärtää miksi automount ei olisi turvallisuusriski desktopeissa, mutta olisi headless serverissä – tosin, enhän minä edes tiedä, että onko se työpöytäasennuksissa oletuksena päällä, kunhan jossittelen.

Joko nyt nopea USB-mount?

Ennen kuin teet yhtään mitään, niin siirry rootin rooliin. Aivan jokainen komento vaatii sudon, eikä sellaista jaksa kirjoittaa. Näppäimistöt maksavat, ei niitä kannata turhaan rasittaa. Tämä ei ole aivan pelkkä vitsikään. Jos kirjoitat paljon, niin törmäät realismiin kuinka surkea painatus näppäinhatuissa on. Ensimmäiseksi katoaviin kirjaimiin kuuluu mm s, u ja o…

sudo -s

  • Kun olet valmis, niin voit komentaa exit ja palaat takaisin oman käyttäjäsi bashiin.

Tulee massamuistin rooli olemaan Raspberryn käytössä mitä tahansa, niin kaikki alkaa yhdestä komennosta:

apt install usbmount

Nyt USB:hen liitetyt muistit mountataan automaattisesti ja löytyvät hakemistosta /media jokainen omassa mountissaan alkaen hakemistosta usb ja päättyen hakemistoon usb7 .

Pari säätöä on kuitenkin vielä tehtävä, jo pelkästään siksikin, että asetukset säilyvät bootin yli.

Avaa:

nano /lib/systemd/system/systemd-udevd.service

Etsi osiosta [Service] rivi PrivateMounts=yes ja muuta se muotoon PrivateMounts=no. Itseasiassa en ole täysin varma, että onko tuolla mitään käytännön merkitystä yhden käyttäjän järjestelmässä, mutta tuolla mahdollistetaan mountin näkyminen hostille.

Tarvitaan vielä yksi säätö. Annetaan muillekin kuin rootille kirjoittamismahdollisuus. Silloin et tarvitse sudoa ihan joka kerta kun teet mitä tahansa muuta kuin luet massamuistin sisältöä.

nano /etc/usbmount/usbmount.conf

Etsi loppupuolelta rivi FS_MOUNTOPTIONS="" ja muuta se:

FS_MOUNTOPTIONS="-fstype=vfat,umask=0000"

Tuo kohta määrää, että kun USB:iin liitetään massamuisti, joka on tiedostotyypiltään vfat – kuten yleensä muistitikut ovat – niin sille laitetaan hakemistojen ja tiedostojen oikeudeksi rwx-rwx-rwx joka tunnetaan usein paremmin numeromuodossaan 777.

Jos et tunne oloasi mukavaksi tuon kaikille kaikki oikeuden antavan säännön kanssa, niin sitten kannattaa googlettaa miten umask muutetaan haluamaasi suuntaan. Mutta taas kerran – jalat maassa. Kun et päästä ketään ylimääräistä Raspberryysi, niin eipä tuolla väliä olekaan. Tai jos/kun koko perhe saa liittyä siihen, niin ehkä niiden raskauttavien valokuvien siirtämiseen kannattaa käyttää jotain muuta tekniikkaa kuin USB-porttiin unohtunutta muistitikkua.

Vilkaise muutenkin usbmount.conf sisältöä. Se selittää sen miksi minulla on mountit usbusb7. Se, että tarvitaanko mountpointteja nimenomaan seitsemän, kun Raspberryssä on neljä USB-porttia ja hakemisto usb taitaa olla vain symbolinen linkki hakemistoon usb1, on oma juttunsa. Kaipa noita voisi selkeyden nimissä vähentää, mutta itse en ole tehnyt sitä. Vielä.

Se selittää myös sen miksi USB-portissa oleva ntfs-kovalevy ei mountaudu automaattisesti – se asia on päätetty rivillä FILESYSTEMS="vfat ext2 ext3 ext4 hfsplus". Tosin, vielä vuonna 2019 ntfs-formatoidut eivät mountautuneet automaattisesti, vaikka olisikin ollut sallittujen joukossa – en testaillut miten on nykyään. Tuosta voisi myös poistaa ext2 ja ext3 – vai käyttääkö niitä vielä joku?

Ymmärrä mitä teet

On kysymys sitten EksisONE sivuston vinkeistä, tai mistä tahansa googlella löydetystä, niin kannattaa olla hieman varovainen, eikä umpimähkää kokeile kaikkea automaattiohjauksella olevalla kopypeistausmentaliteetilla.

Minä en voi heittää ensimmäistä kiveä, koska pääsääntöisesti en ymmärrä mitä teen tai ymmärrän heikosti, joka on usein synonyymi väärinymmärrykselle. Olen kahdesti rikkonut DigitalOceanilla olleen virtuaaliserverin niin pahasti, että jouduin asentamaan uuden ja palauttamaan kaikki sivustot backupeista – onneksi ajantasaiset varmuuskopiot löytyivät. Kolmannella kerralla pääsin hieman helpommalla ja vaikka sivustot olivatkin maailmalle toimimattomia, niin sain rsyncillä sisällön tietokantoineen siirrettyä. Koko järjestelmän kokoaminen uudestaan vie aikaa, eikä hyppyytä riemusta, kun oma verkkokauppa ja muut kaupalliset palvelut ovat samalla alhaalla. Onneksi pidän asiakkaiden sivustot muulla.

Kyllä, minä olen kovapäinen enkä joskus opi kuin kantapäiden kautta ja silloinkin oppi täytyy tuoda kovaa lyömällä.

Kaikissa ongelman ytimenä oli muutama yhteinen tekijä:

  • en katsonut miltä vuosikymmeneltä ohje oli
  • luulin, että ohje piti sisällään kaiken mitä on tarvetta tehdä
  • ja tämä on pahin: luulin, että ohje on ylipäätään toimiva vain siksi, että joku oli laittanut sen nettiin

Riskinä siinä, että ei tiedä mitä tekee, ei yleensä ole turvallisuus tai joidenkin mystisten takaovien aukeaminen, vaikka toki sekin on mahdollista. Realistinen riski on, että ohje ei ole koskaan toiminut ja hajoittaa siksi paikat. Vähän samaa kuin neuvottaisiin käyttämään naftaa bensakoneessa, koska molemmat ovat polttonesteitä ja lentokonekin käyttää kerosiinia.

Netin yleisin julkaisupolitiikka on tällä hetkellä sisällön kopiointi. Tarkoitus ei ole tuottaa hyödyllistä sisältöä, vaan saada mainosnäyttöjä. Siksi jotain ”TOP-10 parhaat sivuston palomuurit: 2020” juttuja löytyy tolkuttomasti. Kaikilla on sama teksti, samat ohjelmat esitettyinä ja samat arvostelut.

Olen törmännyt tilanteeseen, jossa eräässä Varnishiin liittyvässä kikkakolmosessa kaikkilla noin 50+ osumalla oli tismalleen sama typo koodissa, jonka takia Varnishin cache ei toiminut ylipäätään. Asia oltiin kopioitu, eikä yksikään ollut vaivautunut itse kokeilemaan toimiiko väitetty apu.

Tuo tarkoittaa sitä, että koskaan ei saa tyytyä yhteen löydettyyn neuvoon. Mutta myöskään se, että samaa neuvoa tulee jokaiselta IT-aiheiselta sivustolta, ei takaa mitään (itseasiassa tämä pätee aivan kaikessa, ei pelkästään tietokoneaiheissa). Kun löytää jonkun ratkaisun, joka näyttäisi tekevän mitä haluaa, niin kannattaa tehdä toinen google-kierros ja katsoa kuinka paljon foorumeilta löytyy aiheesta kysymyksiä.

Pitkähkö disclaimer siihen, että asetusten muokkaaminen saattaa olla järkevää tai olla olematta. Kysymys on aina asetusten suhteen siitä, että se riippuu. Asetukset on nimenomaan tehty sitä varten, että asioita saadaan toimimaan eri tavalla eri tilanteissa. Kaikki tietävät tämän, mutta harvempi on sisäistänyt asian. On hieman uhrattava aikaa sen pohtimiseen, että tekeekö joku asetus edes teoriassa sen mitä haluaa vai jotain ihan muuta, koska vinkin antajan tarve oli tismalleen päinvastainen.

USB toimii. Tai ainakin pitäisi.

Kun nyt liität massamuistin USB-porttiin, niin sen pitäisi näkyä kaikille ja olla kaikkien käytettävissä – ja kaikki tarkoittaa Raspberryssä olevan järjestelmän kirjautuneille käyttäjille, ei maailmalle.

Vaikka selitänkin aina, että täytyy ymmärtää mitä tekee, niin en elä itse tuon opin mukaan. Joten minulla ensimmäinen täh-reaktio oli, että missä ne USB-muistit luuraavat, koska hakemistosta /mnt niitä ei löydy. Jos olet lukenut tekstin, niin tiedät jo, että ne majailevat hakemistossa /media olevissa usb-alihakemistoissa.

Löydettyäni oikean paikana minulle tuli toinen täh-reaktio: mistä tiedän missä usb-hakemistossa mountattu massamuisti, vaikka muistitikku, majailee. Vastaus on, että tervetuloa komentorivipohjaiseen maailmaan – et suoraan tiedäkään. Graafisessa työpöytäympäristössä näet suunnilleen suoraan mikä on liitetty, mutta tekstipohjainen ei sitä esittele.

Yksinkertainen komentolsblk antaa hieman supistetun vastauksen, mutta hyvin vähäiselläkin mielikuvituksella tietää mikä on mikäkin ja mountpoint kertoo hakemiston, josta massamuisti löytyy (minulla on esimerkissä mountattu vain yksi USB-tikku ja isommat levyt ovat vielä sellaisenaan):

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0  48.4M  1 loop /snap/core18/1708
loop1         7:1    0  48.5M  1 loop /snap/core18/1883
loop2         7:2    0  63.6M  1 loop /snap/lxd/16104
loop3         7:3    0    26M  1 loop /snap/snapd/8543
loop4         7:4    0  61.3M  1 loop /snap/lxd/14808
loop5         7:5    0  23.5M  1 loop /snap/snapd/7267
sda           8:0    0   3.7T  0 disk
├─sda1        8:1    0   128M  0 part
└─sda2        8:2    0   3.7T  0 part
sdb           8:16   0 931.5G  0 disk
sdc           8:32   1   7.5G  0 disk
└─sdc1        8:33   1   7.5G  0 part /media/usb0
mmcblk0     179:0    0    58G  0 disk
├─mmcblk0p1 179:1    0   256M  0 part /boot/firmware
└─mmcblk0p2 179:2    0  57.8G  0 part /

Myös tämä toimii:

mount | grep media

Olen sallinut omassa asennuksessani automountille vain vfat-muodon, joten minulle syöte kertoi pelkästään USB-tikun sijainnin. Sinulla näkynee enemmän.

root@ubuntu:~# mount | grep media
/dev/sdc1 on /media/usb0 type vfat (rw,nodev,noexec,noatime,nodiratime,sync,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)

Kevyt hienosäätö

Koska usbmount on näppärimmillään muistitikkujen ja -korttien kanssa, niin tehdään pari säätöä. Minulla muistitikut liikkuvat Windowsin ja linuxien välillä. Muistikortit ovat tavallaan vielä laajempia, koska niiden täytyy toimia käyttöjärjestelmien lisäksi myös omassa laitteessaan, kuten kamerassa, äänitallentimessa ja videokamerassa. Joten rajoitan tikkujen ja korttien automaattista mounttia tiedostojärjestelmän mukaan. Oma tarpeesi määrää kannattaako, mutta itse käytän näitä.

  • Avataan usbmount.conf

nano /etc/usbmount/usbmount.conf

  • Muuta vastaavat kohdat:
FILESYSTEMS="vfat exfat"
FS_MOUNTOPTIONS="-fstype=vfat,umask=0000 -fstype=exfat,umask=0000"

Huomaa, että kernel 5.3 ja vanhemmat eivät osaa mitenkään käyttää exFAT muotoa. Jos yrittää, niin saa mount error ilmoituksen.

  • Asennetaan vfat ja exFAT formaattien vaatimat palikat:

apt install exfat-fuse exfat-utils

  • Käynnistä Ubuntu uudestaan:

reboot

  • Vaikka sinulla olisi USB:ssä isojakin massamuisteja, mutta niiden tiedostojärjestelmä on vaikka Windowsin ntfs tai linuxin ext4, niin ainoastaan vfat USB-tikut on automountattu ja löytyvät tällä:

mount | grep media

Pysyvämpi ratkaisu

Kun käytetään muistitikkuja, niin usbmount on helpohko ratkaisu. Mutta kun tarve on saada iso levy pysyväksi (tai semipysyväksi) massamuistiksi, niin mount hakemistoon /media/usbX ei ehkä kuitenkaan ole käytettävin ratkaisu.

Päästään takaisin kysymyksiin miksi jotain liitetään USB-porttiin ja mikä on aito tarve. Silloin on vastattava ainakin näihin kysymyksiin:

  • käytetäänkö massamuistia vain Raspberryssä vai onko sen oltava fyysisesti siirrettävä
  • käytetäänkö massamuistia yhdessä Windowsin kanssa
  • onko massamuistin tarkoitus olla mountina jollekin varsinaiselle hakemistolle, kuten /home

Jokainen noista kohdista vaatii erilaisia ratkaisuja.

Mitä on liitettynä?

Ennen kuin voidaan tehdä yhtään mitään, niin on tiedettävä mitä Raspberryyn on ylipäätään liitetty. Ja kuten aina linuxeissa, niin vaihtoehtoja moiseen kyselyyn on useampi. Niistä kannattaa valita se, joka kertoo helpoimmin ymmärrettävästi sen mitä etsii.

Kysymys ei ole pelkästää uteliaisuudesta nähdä mitä konepellin alla on. Ennen kuin voidaan tehdä mitään, niin on tiedettävä mikä on massamuistin tunnus – Windows-maailman malliin onko se C:, D: tai jotain ihan muuta.

Tämä komentohirviö on ainakin minulle mahdottomien ulkoa muistettavien joukossa, mutta pidän sitä informatiivisimpana. Minun ei tarvitse arpoa kokojen perusteella oikeaa laitetta.

lsblk -o UUID,NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,MODEL

UUID                                 NAME        FSTYPE     SIZE MOUNTPOINT        LABEL       MODEL
                                     loop0       squashfs  48.4M /snap/core18/1708
                                     loop1       squashfs  48.5M /snap/core18/1883
                                     loop2       squashfs  63.6M /snap/lxd/16104
                                     loop3       squashfs    26M /snap/snapd/8543
                                     loop4       squashfs  61.3M /snap/lxd/14808
                                     loop5       squashfs  23.5M /snap/snapd/7267
                                     sda                    3.7T                               Expansion+_Desk
                                     ├─sda1                 128M
5848EB2048EAFB9E                     └─sda2      ntfs       3.7T                   4-tera
ddd5b1b5-f246-4ae7-9c3a-42402754864c sdb         ext4     931.5G                               External_HDD
                                     sdc                    7.5G                               Flash_Disk
A2E0-19E6                            └─sdc1      vfat       7.5G /media/usb0       UBUNTU-SERV
                                     mmcblk0                 58G
0468-A52F                            ├─mmcblk0p1 vfat       256M /boot/firmware    system-boot
5fcce78f-2de3-4805-8ffa-d0f11247d5bb └─mmcblk0p2 ext4      57.8G /                 writable

Oletuksella, että näyttösi ei rivitä syötettä, niin siitä näkee suoraan mikä on mikäkin.

  • sda on ulkoinen tavallinen kovalevy,  liitetty usbiin, ei mountattuna, kooltaan yhden teran ja tiedostojärjestelmä on Windowsin ntfs
  • sdb on ulkoinen tavallinen kovalevy, usbissa, ei mountattuna, yhden teran kokoinen ja tiedostomuoto on ext4
  • sdc on USB-tikku, 8 gigaa, tiedostojärjestelmä on vfat ja se on mountattu hakemistoon /media/usb0. Se on Ubuntu 20.04 serverin asennusmedia, jos tarkkoja ollaan
  • mmcblk0 on Raspberryn ikioma muistikortti.

Saatat haluta kokeilla komentoa lshw. Se kertoo puumaisesti mitä Raspberryssä on alkaen, että se on tietokone,  siirtyen siitä prosessoreihin jne. Raspberryn syöte on selailtavissa, mutta isommissa koneissa saatat haluta perään | less

Massamuistin mount

Laitan esimerkinomaisesti yhden isomman levyn Raspberryn käyttöön. Joten yritä hahmottaa mikä koskee minun setuppiani ja mitä sinun pitää muokata omassasi.

Ensin katsotaan mitä on käsillä. Haluan löytää teraisen USB:hen liitetyn HDD-levyn, jossa on ext4 tiedostojärjestelmä:

blkid

/dev/mmcblk0p1: LABEL_FATBOOT="system-boot" LABEL="system-boot" UUID="0468-A52F" TYPE="vfat" PARTUUID="87c6153d-01"
/dev/mmcblk0p2: LABEL="writable" UUID="5fcce78f-2de3-4805-8ffa-d0f11247d5bb" TYPE="ext4" PARTUUID="87c6153d-02"
/dev/sdc1: LABEL="UBUNTU-SERV" UUID="A2E0-19E6" TYPE="vfat" PARTUUID="0cff145c-01"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/loop5: TYPE="squashfs"
/dev/sdb: UUID="ddd5b1b5-f246-4ae7-9c3a-42402754864c" TYPE="ext4"
/dev/sda2: LABEL="4-tera" UUID="5848EB2048EAFB9E" TYPE="ntfs" PTTYPE="atari" PARTLABEL="Basic data partition" PARTUUID="59817920-2703-4b9f-bf96-5b4f314fdd39"
/dev/sda1: PARTLABEL="Microsoft reserved partition" PARTUUID="b72f8be3-dd1f-42dd-970f-fa013d84a8e3"

Ainoa sopiva on /dev/sdb ja sen UUID on sama kuin mitä aiemmin komento lsblk esitti. Nyt täytyy päättää, että mihin hakemistoon se mountataan.

Kyseessä on huomattavan vanha ulkoinen levy, joka on ollut kotikäytöstä siirrettynä valvontakameran tallentimena. Plus vietti viime talven käyttämättömänä kylmässä varastossa. Minulla ei siis ole suurtakaan luottoa sen kestävyyteen, joten se on enemmälti harjoituskappale. Mitään kriittistä siihen ei voi kuitenkaan tallentaa. Laitan sen mount-pisteen siis samaan kuin mihin kaikki muutkin esimerkit: hakemistoon /mnt. Annan sille nimeksi mielikuvituksettomasti buffalo.

Mount-pisteenä oleva hakemisto saa olla melkein mitä tahansa – kunhan se ei ole jo käytössä oleva (eikä tuokaan kielto ole mitenkään ehdoton, mutta sitten tehdään pari asiaa toisin).

mkdir /mnt/buffalo

Mounttaaminen tehdään simppelisti komennolla mount. Itseasiassa se ei taida perusteiltaan olla sen kummallisempi kuin symbolisen linkin muodostaminen. Mounttaamiseen tarvitaan kaksi tietoa:

  • mikä on levyn polku (voi sen mieltää tunnuksenakin), minulla se on /dev/sdb
  • mikä on (äsken tehty) mountpoint, minulla /mnt/buffalo

mount /dev/sdb /mnt/buffalo

Ei se temppuna tuon kummallisempaa ole. Automount on käytössä vain siksi, että ei tarvite etsiä mistään liitettävän muistin nimeä ja sitten tehdä käsin mount komento johonkin jo olevaan hakemistoon.

Sitten vilkaistaan onnistuiko operaatio:

root@ubuntu:~# touch /mnt/buffalo/testi
root@ubuntu:~# ls /mnt/buffalo
lost+found  testi

Hakemisto lost+found on aivan tarpeeton. Se kannattaa poistaa aina tavattaessa, tässä tapauksessa näin:

rm -rf /mnt/buffalo/lost+found/

Eri tiedostojärjestelmät

Mount itsessään ei tietenkään tarkoita, että Raspberry – tai siis Ubuntu tai mikään muukaan linux-jakelu – osaisi tai sallisi tehdä tiedostoille ylipäätään mitään. Linuxin natiivi järjestelmä on ext4, Windowseissa on nykyään ntfs ja muistikortit sekä muistitikut käyttävät tyypillisesti joko muotoa vfat tai exFAT. Niiden erot ja merkitykset vaikka osioinnille saat etsiä itse Googlella – nyt riittää se, että nuo kaikki puhuvat eri kieltä.

Jos liität Windowsiin ext4-muistin, niin ainoa mitä Windows osaa sille tehdä, on tarjota formatointia. Jos esittelet linuxissa ntfs-levyn, niin saat luettua sitä ongelmitta – mutta et pysty kirjoittamaan siihen mitään. Tuo ero on asia, joka on ehdottomasti muistettava, jos käyttää USB-massamuisteja eri järjestelmissä.

Hyvä muistisääntö on, että

  • jos USB-muistia käytetään vain linuxissa, kuten Raspberryssä, niin tiedostojärjestelmä on syytä olla ext4
  • jos sitä käytetään myös Windowseissa, niin tiedostojärjestelmä on ntfs
  • jos sitä käytetään Macien kanssa, niin tiedostojärjestelmä exFAT
  • jos sitä käytetään myös muissa laitteissa, eli puhutaan muistikorteista ja useimmiten myös muistitikuista, niin tiedostojärjestelmä on vfat

Koska on helpompi saada linux ymmärtämään Windowsia kuin Windows linuxia, niin mahdollistetaan muiden tiedostojärjestelmien käyttö linuxissa.

  • Asenna tämä vfat ja exFAT järjestelmiä varten:

apt install exfat-fuse exfat-utils

  • Tämä tarvitaan, että voidaan myös kirjoittaa ntfs-levylle:

apt install ntfs-3g

Tarvitsetko edes ulkoista massamuistia?

Raspberry saattaa kaivata ulkoista muistia, jos siihen tallennetaan enemmän tiedostoja. Tiedostonjako, kuten mediakeskuksen käyttö, saattaa olla sellainen syy. Muutoin kannattaa miettiä tarvetta hieman tarkemmin ja pohtia, että aidostiko tarvitsee nimenomaan Raspberryssä terakaupalla tallennustilaa. Ehkä parempi vaihtoehto olisi asettaa routerin kautta verkkolevy. Tai jos sisäverkossa on jokin isompi työasema, niin käyttääkin sen resursseja hyväksi.

Kysymys voidaan oikeastaan keskittää yhteen ainoaan asiaan: paljonko tarvitaan nopeutta. Tuohon samaan liittyy myös toinen aspekti, tarvitaanko tiedostoja koko ajan. Jos vastaukset ovat kyllä ja kyllä, niin silloin massamuisti mountataan Raspberryyn. Jos vastaus on akselia ei, en tiedä tai ei merkitystä, niin ehkä kannattaa miettiä vaihtoehtoisia tapoja.

Muistikortit eivät ole tarkoitettu varsinaiseen jatkuvaan kirjoittamiseen, mutta jos tarve ei ole jollekin hervottomalle videokokoelmalle, niin ehdottomasti helpoin ja nopein tapa on ostaa isompi muistikortti. Kaupanpäälle saa lakata miettimästä mount-asioita.

Tekee mitä tekee, niin Raspberryssä ei kannata käyttää ulkoista massamuistia säännölliseen työhön, jossa tiedostojärjestelmä on ntfs. Se on hidas ja vaatii tehoja.

Mount ja boot

Kun massamuistin on tarkoitus olla koko ajan käytössä ja saatavilla, niin sen olisi syytä muistaa paikkansa myös Raspberryn käynnistyessä. Jos tyydyttäisiin pelkkään mounttaamiseen ja se pysyisi muistissakin, niin saataisiin hassuja efektejä aikaiseksi. Laitteen hakemisto /dev/sdX ei nimittäin ole vakio. Se voi muuttua käynnistyksessä. Silloin entinen superiso-SSD-levy ei löytyisikään mountpointistaan /mnt/iso-levy, vaan siellä olisikin yhden megan muistitikku – koska se on saanut tunnuksekseen saman sdX:n, joka aiemmin oli SSD-levyllä.

Joudutaan tekemään tunnistus toisella tapaa ja siihen käytetään UUID-tunnusta.

Katsotaan uudestaan mikä oli juuri mountatun levy UUID:

blkid | grep sdb

/dev/sdb: UUID="ddd5b1b5-f246-4ae7-9c3a-42402754864c" TYPE="ext4"

Joskus se on lyhytkin merkkijono. Tällä kertaa ei ollut.

Kaikkien massamuistien tiedot löytyvät tiedostosta /etc/fstab. Avataan se:

nano /etc/fstab

Jossain muussa järjestelmässä tietoa voi olla paljonkin, mutta käyttöönotetulla ja virittämättömällä Raspberryllä sisältö on karu:

LABEL=writable  /        ext4   defaults        0 0
LABEL=system-boot       /boot/firmware  vfat    defaults        0       1

Lisätään sinne uusi levy:

UUID=ddd5b1b5-f246-4ae7-9c3a-42402754864c /mnt/buffalo ext4 defaults,auto,users,rw,nofail 0 0

Syntaksi on sinällään yksinkertainen

  • ensimmäisenä on massamuistin UUID
  • toisena on haluttu mount-piste; se hakemisto, joka tehtiin
  • kolmantena on tiedostojärjestelmä
  • loppu saa periaatteessa olla sellaisenaan

Kun olet tallentanut fstab-tiedoston, niin massamuisti löytyy käynnistymisenkin jälkeen

Jos tiedostojärjestelmä onkin vfat tai ntfs, niin loppu, joka sai periaatteessa olla sellaisenaan, vaatiikin pienen muokkauksen. Lisää loppuun ,umask=000. Silloin määrittely voisi olla tällainen:

UUID=ddd5b1b5 /mnt/joku-hakemisto ntfs defaults,auto,users,rw,nofail,umask=000 0 0

Se, että jokin on lisätty fstab tiedostoon, ei vielä tarkoita sitä, että se on käytössä. Tällä kertaa jätetään systemctl rauhaan ja uudet mountit saadaan käyttöön paljon nopeammalla komennolla:

mount -a

Voi tietysti buutatakin. Sekin on vaihtehto.

Mountin poistaminen eli unmount

Kun Raspberry sammutetaan komennolla shutdown, niin järjestelmä purkaa mountin kuten kuuluukin. Mutta jos haluat itse tehdä saman, kuten ottaessasi muistitikun irti, niin sinun täytyy itse katkaista mount.

Komentona se on hyvinkin yksinkertainen:

umount /mnt/hakemisto

  • Minun oli pakko tehdä alias unmount, koska se tuli luonnostaan lihasmuistista. Homma hoituu suoraan tällä komennolla:
    echo "alias unmount='umount'" >> ~/.bash_aliases && . ~/.bashrc

Joten on pakko tietää mikä on juuri sen irroitettavan muistin mount-piste, kuten muistitikulla komento voisi olla umount /media/usb1 tai jos haluaisinkin siirtää äsken esimerkissä mountatun kovalevyn johonkin toiseen koneeseen, niin komento olisi umount /mnt/buffalo.

Mountin irrottaminen edellyttää, että kukaan ei samaan aikaan käytä mitään sen hakemiston tiedostoa tai edes ole koko hakemistossa. Jos on, niin saa virheilmoituksen target is busy.

Useimmiten syy on niin yksinkertainen, että on itse mountatussa hakemistossa. Silloin cd .. on helpoin tapa korjata tilanne. Aina ei ole kuitenkaan ihan selvää, että kuka tai mikä jarruttaa irrottamista. Sen saa selville komennolla lsof.

lsof /mnt/buffalo

root@ubuntu:/# umount /mnt/buffalo
umount: /mnt/buffalo: target is busy.
root@ubuntu:/# lsof /mnt/buffalo
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    2408 jagster  cwd    DIR   8,16     4096    2 /mnt/buffalo

Tässä tapauksessa irroittamisen estää käyttäjä jagster, jonka bash on hakemistossa /mnt/buffalo

Kovalevyn poistaminen kokonaan käytöstä

Jossain vaiheessa saattaa haluta poistaa massamuistin kokonaan käytöstä niin, että järjestelmä unohtaa sen kokonaan. Se on temppuna helppo

  • Katkaise ensin mountti, esim. umount /mnt/buffalo
  • Avaa fstab ja poista levyyn liittyvä rivi
  • komenna mount -a

Muistitikun helppo käyttö

Minun nähdäkseni Raspberryssä, ainakaan Ubuntulla, ei shell-tasolla ole olemassa sellaista kuin helppo ja joustava tapa käyttää muistitikkua.

Vaihtoehtoja on tasan kaksi:

  • joka kerta katsotaan erikseen mihin /media/usbX mount-pisteeseen muistitikku ilmestyi
  • tehdään fstab-tiedostoon vakio mount-piste vain ja ainoastaan juuri sille nimenomaiselle muistitikulle

Kommenteissa saa kertoa, jos maailmassa on jokin muu tapa.

Formatointi, partitiointi ja osiot

Massamuistin osiointi ei sinällään ole suoraan mount-asiaa, mutta se on hyvinkin olennaisesti USB-massamuistien käyttöön liittyvä asia. Suurin osa ulkoisista massamuisteista tullee valmiiksi formatoituina ilman osoiointia – ja formatointi tarkoittaa, että ne ovat suoraan käytettävissä Windowsissa. Silloin ne saadaan toimimaan myös linuxeissa, mutta ei lähellekään optimitavalla.

Kun ostat Raspberryn kaveriksi ulkoisen massamuistin (paha sitä on sisällekään laittaa, mutta kylkeen on mahdollista…), niin joudut miettimään kahta asiaa:

  • saako se olla yksi iso vai tarvitaanko erillisiä pienempiä osia
  • mikä on tiedostojärjestelmä

Jos muistin on toimittava Windowsissa, niin tiedostojärjestelmä on ntfs (paitsi pienemmillä vfat) ja osiointiasiat kannattaa hoitaa siellä – olkoonkin, että lixux jakaa ja formatoi ihan iloisesti melkoiseen määrään eri järjestelmiä. Mutta jos  tarve on nimenomaan laajentaa Raspberryä, niin tiedostojärjestelmä on ext4 ja asiat hoidetaan shellissä (tai desktopin puolella, mutta siihen en ota kantaa).

Minulla on 4 markkinointiteraa mahduttava ulkoinen asema, joka on aikaisemmin saanut olla Windows-läppärin jatkeena. Nyt se saa ylennyksen alkaa laajentamaan Raspberry Pi serveritietokonetta. Joten urakka alkaa samasta kuin aina – katsotaan millä saadaan muistilaite tunnistettua:

lsblk

sda           8:0    0   3.7T  0 disk
├─sda1        8:1    0   128M  0 part
└─sda2        8:2    0   3.7T  0 part

Etsitty levy on siis sda ja siinä on kaksi osiota, joista sda1 saa jäädä tulevaisuuden varalle, koska se on Windowsin tarpeisiin ja kooltaan vain 128 Mt, mutta sda2 jyrätään ja viipaloidaan.

Osiointiin käytettävä työkalu on fdisk. Otetaan työn alle /dev/sda levy:

fdisk /dev/sda

root@ubuntu:/# fdisk /dev/sda

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help):

Anna m niin näet listan komennoista

  • Katsotaan ensin miltä osiointi nyt näyttää – komento on p
Disk /dev/sda: 3.65 TiB, 4000787029504 bytes, 7814037167 sectors
Disk model: Expansion+ Desk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: AA42672D-65E1-470D-ADC1-975DAE1F3020

Device      Start        End    Sectors  Size Type
/dev/sda1      34     262177     262144  128M Microsoft reserved
/dev/sda2  264192 7814035455 7813771264  3.7T Microsoft basic data

Partition 1 does not start on physical sector boundary.

Command (m for help):
  • Poistetaan sda2 – komento on d
Partition number (1,2, default 2): 2

Partition 2 has been deleted.

Command (m for help):

Ensin kysytään kumpi osio poistetaan, ja halusin kakkosen häviävän. Ja se hävisi, hyvin ilmeettömästi. Jos kyseessä olisikin ollut aito työlevy, niin yhdellä enterillä olisi kadonnut neljättä teratavua dataa sen enempää kyselemättä. Kannattaa siis miettiä mitä tekee. Ja varmistaa vielä kerran tai kaksi.

Hyvät uutiset ovat, että mitään ei ole poistunut. Itseasiassa yhtään mitään ei ole vielä tehty. Jos nyt valitsisin q niin ohjelmasta poistuttaisiin ja kaikki on kuin ennen.

  • Nyt teen uuden osion – komento on n
Partition number (2-128, default 2):
First sector (262178-7814037133, default 264192):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (264192-7814037133, default 7814037133): +100G

Created a new partition 2 of type 'Linux filesystem' and of size 100 GiB.
Partition #2 contains a ntfs signature.

Do you want to remove the signature? [Y]es/[N]o: y

The signature will be removed by a write command.

Command (m for help):

Ensimmäisenä kysytään osion numeroa. Lähes aina tarjottu oletus on oikea. Sitten kysytään osion ensimmäistä sektoria. Jos ei ole tarkkaa tietoa levyn rakenteesta, niin muuta järkevää vaihtoehtoa ei ole kuin hyväksyä tarjottu, joka on ensimmäinen vapaa. Seuraavaksi kysytään viimeistä sektoria, joka määrää osion koon. Jos tekee vain yhden osion, niin enterillä saa valittua koko tyhjän tilan. Mikäli kuitenkin haluaa tehdä useamman osion, niin valintaa täytyy miettiä. Hyvät uutiset ovat, että ei tarvitse ymmärtää sektoreista yhtään mitään, vaan koon voi ilmoittaa kiloina (K), megoina (M), gigoina (G), teroina (T) tai petoina (P) (kenellä on petatavun kovo?). Muista laittaa + merkki koon eteen.

Viimeistään nyt on mietittävä mitä oikeastaan on tekemässä. Tarvitsen yhden osion webprojekteja varten. Aidosti se tulee olemaan mountattuna hakemistoon /var/www eikä sen tarvitse olla 100 gigaa suurempi (aidosti pienempikin kävisi). Lohkaistaan vielä 500 gigaa omia projekteja varten, joka mountataan omaan kotihakemistooni. SSD-kortit eivät pidä siitä, että niihin kirjoitetaan koko ajan ja logit ovat yleisin syy jatkuvaan kirjoitteluun. Joten siirretään logitkin pois Raspberryn muistikortilta, 10 gigaa on enemmän kuin riittävästi. Loput jääkööt isoksi säilöksi.

Joten vastaan +100G. Sen jälkeen kysytään halutaanko signature poistaa. Koska se on ennen ollut ntfs-osio ja tulee muuttumaan muotoon ext4, niin vastaan kyllä Jos haluaisin, että levyä kuitenkin käytettäisiin tavalla tai toisella myös Windowsin puolelta, niin tiedostojärjestelmän olisi oltava ntfs.  Sen jälkeen toistan edellisen ja luon kolme muuta osiota – yhdelle tulee +10G, toisen kooksi ilmoitan +500G ja koska kolmas saa loput, niin pelkkä enter riittää.

  • Voin tarkistaa komennolla p vielä kerran, että osiojako näyttää sellaiselta kuin halusin:
Device          Start        End    Sectors  Size Type
/dev/sda1          34     262177     262144  128M Microsoft reserved
/dev/sda2      264192   21235711   20971520   10G Linux filesystem
/dev/sda3    21235712  230950911  209715200  100G Linux filesystem
/dev/sda4   230950912 1279526911 1048576000  500G Linux filesystem
/dev/sda5  1279526912 7814037133 6534510222    3T Linux filesystem
  • Nyt aletaan olemaan jännän äärellä. Joko poistutaan komennolla q tai toteutetaan muutos komennolla w. Antaa mennä, w se on:
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Aikaa muutokseen menee… ehkä sekunti.

  • Osiot eivät ole vielä käyttökelpoisia. Ne on formatoitava. Varmistetaan ensin osiot, jotka formatoidaan lsblk komennolla:
sda           8:0    0   3.7T  0 disk
├─sda1        8:1    0   128M  0 part
├─sda2        8:2    0    10G  0 part
├─sda3        8:3    0   100G  0 part
├─sda4        8:4    0   500G  0 part
└─sda5        8:5    0     3T  0 part
  • Ensimmäinen, sda1, on Microsoftin varaama, joten jätetään se rauhaan. Sen sijaan sda2, sda3sda4 ja sda5 saavat uuden ja tuliterän tiedostojärjestelmän.
mkfs.ext4 -L LOG-4T /dev/sda2
mkfs.ext4 -L WWW-4T /dev/sda3
mkfs.ext4 -L JGSTR-4T /dev/sda4
mkfs.ext4 -L POD-4T /dev/sda5

-L asettaa osion labelin, nimen. Se on vain informatiivinen ja omaan käyttöösi. Nimeä miten haluat, kunhan tiedät mitä se tarkoittaa, etkä käytä erikoismerkkejä tai ääkkösiä. Ja nyt on syytä varmista toisen, kolmannen ja neljännenkin kerran, että on formatoimassa oikeaa osiota.

Kun annat komennon, niin parissa kohdassa näkyy vilkkuva kursori. Se ei pyydä sinulta mitään, joten sormet irti näppikseltä.

root@ubuntu:/# mkfs.ext4 -L WWW-4T /dev/sda2
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 26214400 4k blocks and 6553600 inodes
Filesystem UUID: f06477e9-0dc5-4eb3-b077-6212e49723cc
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done

Tämä on nopea operaatio. Jos olet Windowsissa tottunut siihen, että 8 gigan muistitikun formatoinnissa menee aikaa yhden kauppareissun verran, niin kolmisen teraa hoidettiin varmaan alle 10 sekunnin. Toki tehtiin hieman eri asioita ja tämä vastaisi samaa kuin Windowsin pika-alustus. Mutta silti.

Nyt osiot on tehty ja ne voidaan mountata ja asettaa fstab avulla normaalisti käyttöön. Ainakin siltä osin, kun ei jotain olemassa olevaa hakemisto siirretä uudelle kovalevylle.

Muista myös, että mount-piste täytyy erikseen laittaa kaikille luvalliseksi kirjoitus- ja lukuoikeuksien suhteen. Nyt törmätään tilanteeseen, jossa vaikuttaa kaksi eri asiaa. Itse massamuistin puolella oikeuksiin vaikuttaa massamuistin oikeudet sekä massamuistin käyttöön liittyvät oikeudet, jotka on annettu mountin yhteydessä. Mutta koska mount-piste on järjestelmän ikioma hakemisto, jonka on luonut root, niin käyttäjä ei kirjoita sinne yhtään mitään ilman sudoa – vaikka levy itsessään siihen suostuisikin.

Asia on ehkä helpompi sisäistää, kun miettii mount-pisteen ihan tavallisena paikallisena hakemistona, jossa on ihan tavallisia paikallisia tiedostoja – ne vaan synkataan siihen laitteeseen ja laitteesta, joka on mountattu.

Joten annetaan käyttäjille oikeudet – tietysti sillä oletuksella, että mount on tarkoitettu kaikkien käytettäväksi:

sudo chmod 777 /mnt/hakemisto

/var/log uudelleenmounttaus

Se, että jo olemassa oleva hakemisto halutaan siirtää uudelle kovalevylle tai osiolle, ei ole mitenkään harvinainen operaatio. Useimmiten se varmaan tehdään /home hakemistolle. Joko siksi, että halutaan lisää tilaa tai sitten käyttäjien tiedostot halutaan turvaan. Jos systeemilevy hajoaa, niin järjestelmästä riippumattomat käyttäjien kotihakemistot ovat kuitenkin tallessa.

Minulla työskentelytavat ovat hieman erilaiset. Työtiedostot ovat eri paikoissa, riippuen mitä teen, eivätkä suuremmin tule viettämään aikaa Raspberryn muistikortilla. Lisäksi backuppaan asioita kohtuullisen tiiviisti, joten mitään varsinaista katastrofia ei muistikortin hajoamisesta tulisi (isot kovalevyt ovat kylläkin hieman toinen asia…)

Sen sijaan käytännön elämäni saattaa kaivata kahden järjestelmässä olevan hakemiston mounttaamisen uudelle levylle:

  • /var/log koska minut onnistuttiin säikyttämään muistikorttien kirjoitusherkkyydestä
  • /var/www koska tarvitsen sitä töitteni takia ja se saattaa välillä olla isohkokin

Tehdään esimerkinomaisesti hakemiston /var/log mounttaus, mutta samalla tavalla kaikki vastaavat tehtäisiin. Käytän oman järjestelmäni tietoja, joten vaihda ne itsellesi sopiviksi.

  • Osioinnista tiedän jo, että käytän osiota /dev/sda2 mutta otetaan näkyviin myös UUID:

blkid | grep sda2

/dev/sda2: LABEL="LOG-4T" UUID="11e01e4c-04b8-43c3-933e-549a2854c55c" TYPE="ext4" PARTUUID="350de1f5-7287-5e4f-b921-cb7f9a85f250"

  • Avataan fstab:

nano /etc/fstab

  • Kerrotaan mount-piste:

UUID=11e01e4c-04b8-43c3-933e-549a2854c55c /mnt/logs ext4 defaults,auto 0 2

  • Tehdään mount-piste:

mkdir /mnt/logs

  • Ladataan uusi mountti käyttöön:

mount -a

  • Kopioidaan vanhat tiedostot uuteen paikkaan:

rsync -av /var/log/* /mnt/logs/

  • Palautetaan /var/log sinne minne se kuuluukin, joten avataan fstab:

nano /etc/fstab

  • Muutetaan aiemmin laitettu mount-piste oikeaksi hakemistoksi muokkaamalla aiemmin tehtyä riviä:

UUID=11e01e4c-04b8-43c3-933e-549a2854c55c /var/log ext4 defaults 0 2

  • Siirretään vanhat tiedostot varmuuskopioksi ja tehdään tilaa uusille, jotka ovat vielä ensimmäisessä mount-pisteessä:

mv /var/log /root/var.log.old && mkdir /var/log

  • Otetaan uusi ja lopullinen mount käyttöön:

mount -a

Minä en tiedä mitä pitää tehdä, jos operaatio ei onnistu. Minulla se on onnistunut aina.

Lopuksi

Periaatteessa USB-muistien käyttäminen ”nopeana” massamuistina, kuten muistitikkuja yleensä käytetään, onnistuu nyt. Silti sanoisin, että kannattaa samantien opetella vaihtoehtoiset tiedostonsiirtotavat – kuten rsync tai pilvipalvelut. Muistitikut eivät oikein ole enää tätä päivää. Mutta niitä voi aivan hyvin käyttää, se vaan vaatii hieman käsitöitä.

Koska Raspberry Pi on täysin riippuvainen USB-porteista massamuistina, niin kannattaa muistaa koko ajan, että USB portteja on vain neljä ja niistä vain kaksi on USB 3.0 portteja. Porttien vähyys on nykyään yleinen ongelma ja itseasiassa Raspberryssä on monta USB-porttia. Olen törmännyt läppäriin, jossa oli vain kaksi USB-porttia. Omassani on huimaavat kolme, ja kun yksi on koko ajan varattuna hiirelle ja toisessa oli USB-liitäntäinen kovalevy, niin oli kannustavaa lukea milloin mistäkin apuvälineestä – jossa oli USB-liitäntä.

Se tarkoittaa kuitenkin sitä, että Raspberryssä ei voi miehittää USB-portteja laitteilla, joiden on oltava koko ajan kytkettynä. Joten massamuistipolitiikassa kannattanee suosiolla ostaa yksi isompi SSD-levy ja osioida se, kuin käyttää useampaa.

Toisaalta – jos mitään muuta ei ole USB-kytkentäisenä, niin hittoako siinä sitten.

Usein valitetaan kuinka vähän RAM-muistia laitteissa on. Pitää paikkaansa, mutta suurimmalla osalla aito ongelma ei kuitenkaan ole muistin vähyys, vaan tallennustilan vähyys. Raspberryyn tallennustilan lisääminen ei välttämättä ole maailman edullisinta, mutta se on taatusti helpointa – ei paljoa tarvita ruuvimeisseliä.

 

Voit haluta vilkaista myös:

 

Jakke Lehtonen

Teen B2B-markkinoille sisällöntuottoa sekä UX-testauksia. Samaan liittyy myös koulutukset yrityksille ja webmaailman kanssa muutoin painiville. Serverien sielunelämää on joutunut ohessa opettelmaan. Toinen puoli toiminnasta on koirien ravitsemuksen ja ruokinnan suunnittelua sekä varsinkin omistajien kouluttamista hoitamaan koiriaan oikein ja vielä paremmin. Profiili: Jakke Lehtonen

Keskustele foorumilla Meta/KATISKA