Inlägg

Inlägg som Sweedland har skrivit i forumet
Av Sweedland

Epilog.
Efter en hel del bråk med "rpi-clone" kunde jag clona SD-kortet medan det var monterat och dessutom få ner det från 16G till 8G. Det kunde bara göras om jag före justerade 8G kortet med gParted. Det var tvunget att minska ner stora partitionen ganska rejält och låta rpi-clone justera upp den. Det var lite handpåläggning. Vid tid ska jag krympa ner img-filen och dd:a över den till Target. Känns mer seriöst men att få cloningen att funka oavsett metod var viktigast.

Av Sweedland

Jag blir galen om detta är sant:

"A better option is the SD card copier (piclone) included in Raspbian itself , since it works with cards both smaller and bigger than the original. You must be running Raspbian on the Pi and need to use an additional USB cardreader (or USB harddisk/pendrive)."

Av Sweedland
Skrivet av xxargs:

du får läsa manualen för dd

dd tar hela volymen om du inte har instruerat något annan.

med flagga 'skip' (skip=2048) så hoppar du över ett stycke i antal block räknat från början av volymen

med 'count' (count=123000) så säger det hur stort stycke i antal block som skall kopieras ut från punkten där 'skip' stannade

dvs med 'dd if=/dev/sda of=/path_to_masstorage/partial_image skip=1024 count=30000 bs=1024'

Så säger man att hoppa över de första 0-1023 blocken, från blockpositionen vid 1024 blockposition så kopierar man ut 30000 block till /path_to_masstorage/partial_image och sedan avslutas det. Med 'bs' så bestämmer man hur stort en block är, ovan exempel då satt som 1024 Byte och då motsvarar en block 1 kB i storlek.

Man kan alltså (tillsammans med 'cat') klippa och klistra med 'dd' och därför är verktyget väldigt användbart för lågnivå-meck på hårddiskar.

---

Det finns tillfällen där jag har kört med bs=1 (blockstorlek räknat på 1 byte-nivå) för att kunna plocka ut starten på en tar-arkiv i en tapevolym som var totalt havererad (hatar kommersiella programvaror som inte kan hantera ÅÄÖ i filnamn... - stora Ö i dos som första bokstav i filnamn har samma kod som för raderad fil i FAT-filsystem - och då krachade tape-streamer programmet fullständigt...) - var väldigt glad att jag inte hade slagit på kompressionen (i propertiär format) den gången...

Och det roliga med tar är att varenda fil ur tar-arkivet kan man hitta genom att dess början markeras med just 'ustar' som magic-word och med 'grep' och andra hjälpmedel hitta exakt positionen och med titt i tar.h i källkoden vet man hur många byte framför 'ustar' man skall klippa ut med 'dd' för att sedan kunna packa upp filen med 'tar' - tar-arkiv har egenskapen att även om filen ifråga är sönderklippt i bitar så går det extrahera filerna med rättigheter, path etc. så länge filhuvudet med datakropp precis efter är komplett och går att identifiera.

tar-archive är en av de ytterst få arkivformaten som har distrubierad direktory/tabell över filerna och är räddningsbart till stora delar även om en bit av början är borta eller en bit i mitten är utklippt - 'tar' står står ju för 'Tape Archiver' och man kanske inser en viss pragmatisk inställning till det hela med början som råkade bli överskriven en bit innan det hejdades och man kan få bandsallat på mitten... - och det som är kvar efteråt är ändå räddningsbart!!

prova att klippa av början på en zip-fil, rar-arkiv etc. och sedan försöka rädda det som är efter i filkroppen - så förstår man snart varför 'tar' är rätt unik i tänket vad man kan göra med arkivet den dagen när det redan har skitit sig... som bit-rot på ett media

*flin* Jag läste som hastigast "man dd" igår innan jag åkte hem från jobbet. Trodde jag skulle hitta nåt men hade inte mycket tid. Men nu så finns det en öppning med count vill jag påstå. Jag har ändå en obekräftad känsla av att det finns information i det som dd läst av Source hur stor SD-kortet ska vara så även om jag krymper ner img så det får ledigt plats på det nya lite mindre Target så kommer boot ändå att läsa in att "SD ska vara så HÄR stort men Target är inte det" och därmed göra halt. Men men...trägen vinner. Varför det vore lyckat är att vi kan ledigt använda 8Gigs SD-kort för hela OS+applikation är bara 5Gig.
Det blir mycket obetalt arbetstid det här. Tur för företaget att jag har det som hobby också. Ingen projekt har råd att betala för min löpande utbildning i Linux.

Angående din story om tar. Jag har alltid sagt att tvång är bästa läromästaren. Det låter som om du var tvungen att rädda vissa filer ur arkivet?
Som jag (tror) jag skrev så i och med mitt labbande med dd och andra program med min externa hårddisk ansluten till Raspberryn så "råkade" jag radera hela Ext.HD med bland annat en folderhiarerki med 17års data från mitt förra jobb. De jag nu är konsult åt. Jag gjorde i ett svep om Ext.HD till ett RPi SD-kort. Ha ha. Resten av datat var borta.
Jag blev totalt kallsvettig för detta data som försvann är kritiskt då jag använder det när de forna arb.kamraterna (numera beställare) ringer mig och frågar mig om diverse jobb jag gjort där. Min sambo undrade varför jag blev så blek. Lite senare drog jag mig till minnes att hade windows-arkiv på en secondary HD på min stora dator och i ett av dessa arkiv fanns en backup på detta viktiga data. Lärdom: Lokalt sparat data är farligt för dit når inte företagets nattliga backup.

Nu ska jag grepa lite tar-arkiv och sen testa count....tack för hjälpen förresten.

edit:
I gparted finns all information om den nerkrympta source-SD:n. Antalet sektorer och storleken på sektorerna. Det är bara å tuta o köra...

Av Sweedland
Skrivet av FattarNiInte:

Ärr det inte bättre att kopiera filerna istället? Går ju snabbare och storleken på diskarna spelar ingen roll.

Ja. Det kan ju vara idealiskt men utan att gå in på detaljerna så tror jag att dd är bäst då den tar boot, sys.inställn. o allt annat.
Jag provade att krympa ner partitionen så när dd skapade sin image så skulle den inte vara så stor. Men dd tycks ta hela SD i alla fall så när jag skulle skicka över img till det nya något mindre SD-kortet så vad ändå denna Img för stor. Där brister jag i knowhow hur göra så att dd (eller nåt annat program) läser bara till sista partition o inte mer när den ska skapa img.

edit: Sen använder jag rsync för att göra backuper av det jag gör....det är en annan story.

Av Sweedland
Skrivet av xxargs:

Låter som en panik-grej hos själva SD-minnet - när du läste efter skrivningen så var vissa sektorer inte läsbara eller hade korrupt data och det krachade.

Boot och OS brukar inte kolla hela vägen om en filsystem verkligen räcker hela vägen som partitionstabellen anger - problem kommer först när OS försöker anropa en sektor väldigt i slutet av filsystem och först så upptäcker att filsystemet är större än den fysiska mediat och då får ett IO-error - men inte innan dess.

Så fråga 1 är varför din SD-bricka blev mindre - om du både tagit en diskimage av SD-brickan och sedan lagt tillbaka på samma SD-bricka. En förklaring är den bedrövliga kvalitens på SD-minnerna idag och det trollade med knäna när du skrev imagen tillbaka på SD-minnet.

nästa gång när du lägger tillbaka en disk-image på en SD-bricka - läs ut imagen igen (exakt lika många sektorer och samma startpunkt) till en fil under annat namn och kolla med tex sha512sum att imagen verkligen är lika som orginalet och inte har utläsningsfel (läs silent error från dåliga sektorer från SD-minnet)

- ungefär som gamla tiders bränning av DVD att man alltid skall verifiera - SD-minne idag är tom. sämre än DVD-R - för SD-minne säger inte till när det är läsfel på sektorer - ger bara korrupt data lika glatt som korrekt data (silent error)...

- obs gör ingen 'mount' av imagen innan det är gjort - så fort det mountas så ändras det saker i filsystemet och checksumman stämmer inte längre - i ubuntu kan det finnas automount som kan stöka till med mount av enheten så fort den känner igen en giltig partitionstabell och man kanske får kika i https://help.ubuntu.com/community/Mount/USB för att stänga av det.

Target SD-kortet ÄR mindre. Några 100 Meg som jag minns det. Det sade dd till om efter att den dumpat över img. Men jag tog nyaladdade SD-kortet ialla fall och stoppade i o körde. Då bootade den bara till hälften. Sen tvärstopp. Det var då jag läste om att man kan minska ner stora source med nån GIG och sen köra en img av den med dd. Låter det som en plan?

Sen vill jag testa rsync i virtualbox/Linux Mint mellan source o target. Kopiera fil för fil till det tomma (men monteringsbara) SD-kortet.
Det kanske är en annan historia...

Av Sweedland
Skrivet av xxargs:

Det skall gå utmärkt att köra fram och tillbaka disk-imagen till samma SD-kort.

Vad säger det om storlekarna - är är imagen resp SD-korten på sektorn/byten exakt lika stora efter att du tog backuppen??

Det som kan ha hänt är att SD-kortet har tagit bort några av sektorer vid skrivning för att de inte fungerar och SD-kortet blev en smula mindre bara sådär genom att IO-error inträffade en smula tidigare när man närmade sig slutet av disken. Med SD-kort, deras variant av wearlevling och numera i allmänhet lågkvalitetsminne så vet man aldrig längre...

Det andra är om du körde av partioner (sda1, sda2 etc. och inte sda) som image och inte hela disken som image är att du inte använder MBR utan kanske GPT som partitionstabell när du skapade detta på nytt och det slukar mer utrymme och det fattas ett antal sektorer plötsligt.

Om du kan mounta partitionerna och enbart filerna är intressanta så kan du givetvis kopiera ur dessa med rsync eller annan kopieringsmetod (cp -a).

det som kan vara lite plock och mickel är att få med all info som sedan behövs för att SD-minnet skall boota korrekt på en annan SD-bricka - med diskimage så kommer man i regel runt sådana saker även när man flyttar diskimage till en SD-bricka som är exakt lika stor eller något större (räknat i antal sektorer)

Det som hände när jag använde dd för att "återställa" och det funkade faktiskt o boota target till och börja med MEN booten stannade mitt i . "KERNEL PANIC STOP" eller nåt sånt. Kollade med gparted o den meddelande att partitionen inte kan vara större än vad som var tillgängligt. target är ngt mindre än source.

Jag ska shirinka source med gparted tror jag på ett av de större korten (annat märke) men använda en test-SD först. Sen köra dd till ext. hårddisk. Sen göra en dd tillbaka till target (som är av ngt mindre storlek) och se om de funkar. Att bränna en hel image känns mkt bra för då följer allt med...kan zippa den och ha den i versionshanteringssystemet. Tror det är bra att använda bs=1M när dd används...

Ska också testa rsync från source till target i min windowsdator/linux. Har bra minnes-korts-läsare i den datorn.
Måste kolla längre upp i denna tråd hur rsync skulle konfiggas så systemet med filattribut kan följa med över obehindrat.

Av Sweedland
Skrivet av xxargs:

'dd' gör ingen sådan bedömning - får image-filen plats på den nya större SD så är det ingen problem där - även om SD skulle vara mindre än imagefile så kopierar 'dd' tills det tar stopp.

'dd' ser imagefilen som vilken annan fil som helst och bryr sig inte om vad som står i denna alls.

---

när du tar ur och mata in SD:n igen så kommer OS att upptäcka att det finns en partitionstabell och i denna vidare hänvisning till resp partition - ja så länge som det hela betraktas med LBA-adressering vill säga.

kräver BIOS/OS CHS-adressering av disken (vintage-datorer) så är det mycket besvärligare - men det tar vi den dagen när man råkar på en sådan situation.

Testade med Raspibackup och lade över partitionsbackupperna på en Extern hårddisk. Skulle göra en restore till ett mindre SD-kort sen. Det var några meg för litet så det funkade inte. Sen gjorde jag en dd och lade den på samma externa HD. Gjorde en dd tillbaks till ett samma "lilla" SD-kort. dd larmade att det var för litet. Tröttnade ur lite då.
Nästa idé jag fick är att montera source och target i var sitt SD-kortläsare och stoppa de två i var sin kortläsare (som jag har på min stora windowsdator). På den datorn har jag Linux Mint i en virtualbox. Tänkte köra rsync och kopiera över alla filer till target....vad tror du/ni om det?

Av Sweedland

Kul att vi är i samma kommun. flush->sync->close...

edit: Detta bör väl bara gälla vid skrivningar till fil. Läsa fil bör räcka med fclose()

Av Sweedland

Korrekt sätt att öppna o stänga en fil?

Om man använder fopen() så ska det ingå en fclose(), men vad göra om fopen() returnerar NULL? I min värld så behövs inte fclose om inte fopen lyckats.
I en annan tråd här så pratar vi om fsync(). Var ska den placerar i koden?

Så här har jag det:

FILE *f; f=fopen(blabla); if(f != NULL) { jobba jobba... fsync(fileno(f)); //På remiss fclose(f); } else { Error.... }

Om värdet av f == NULL har alltså inte fopen lyckats och därmed krävs ingen fclose()?
fsync kan kanske ersättas av fflush(). Det kanske är så att fflush() ska vara före fsync?

Tacksam för input i detta. Jag misstänker jag förenklar för mycket.
(PS/Jag jobbar i en Raspberry Pi o anv. gcc)

Av Sweedland
Skrivet av xxargs:

i Unix-världen förr så skrev man reflexmässigt 'sync' två gånger i rad i consolen efter olika skript som innefattade skrivningar mot disk för att försäkra sig att allt som låg i filbuffrarna skrevs ut till media[1].

Du kanske får prova med något liknande eller öppna filerna i 'sync' mode om det går med flaggor.

---

Du får leta fram gamla och skitlångsamma SD-kort från början av 2010 med SLC-celler i sig om det skall vara något så när säkert.

en variant i nutid är 'industrial' SD-kort liknande

https://www.elfa.se/sv/industrial-sd-kort-gb-xmore-industrial...

och man får betala för det också...

Att gå upp till snabbare kort och större storlek i konsumentklass har motsatt verkan då dels är MLC och TLC-minne i dem med låg tålighet mot omskrivning och kort lagringstid - samt att det är baserat bottenskrapet av minnechip som stoppas i dem - dvs. minnen som klassat inte duger för inbyggnad eller SSD.

skall du skriva och läsa mycket så föreslås istället USB-snurrdisk eller SSD-minne i en USB-kabinett som masslagring och använder SD-bricka enbart som boot-media och skriver mot den så lite det går.

varken SD-minne eller USB-stickor kan anses som pålitlig lagringsmedia idag...

[1]

När man skrev 'sync <enter> ' första gången så fick man tillbaka promten omedelbart igen och man visste inte om jobbet var klart, därför skrev man snabbt 'sync <enter>' en gång till då om den första 'sync' inte ännu var klar så kunde den påföljande 'sync' inte köras och promten var borta till sync-processen verkligen var klar!.

Då måste jag fråga; Kan det vara vettigt att skriva fflush(stream) före fclose() (fflush(NULL) flushar alla öppna filer) ? Som i PHP kan man ju skriva flush() för att tömma bufferten....

Edit:
"Note that fclose() flushes only the user-space buffers provided by the
C library. To ensure that the data is physically stored on disk the
kernel buffers must be flushed too, for example, with sync(2) or
fsync(2)."

Jag tror jag ska använda mig av ramdisk till de filer som används intensivt. Endast en del av dessa filer ska sammanställas och sparas för eftervärlden.
Ska testa detta under veckan. Senare får jag fundera på SSD för den "operativa delen" och ha enbart SD för boot.

Av Sweedland
Skrivet av Whaleboobs:

Provat att byta SD-kortet? Jag hade problem med min rock64 enkortsdator, trodde jag, men var i själva verket sd-kortet som förlorade bits eller något. klass 10? javisst.. men ändå krashar OS:et och startar inte mer. Efter att ha provat att skriva X avbild och kolla differens mellan avbild och läsning så kom det fram att kortet tappar data. ibland fungerade det, ibland inte.

Ska testa att byta SD-kort. Det är ju tråkigt att "Klass 10" kort också ger problem. Det är lite svajjigt.
Jag undrar om jag inte blir i förlängningen tvungen att ersätta SD-kortet med nåt annat....

Av Sweedland
Skrivet av Haptic:

SD-kort är långsamma, men skrivningar läggs ju i buffer å skrivs så fort som möjligt. Det kan ju bli problem om du skriver så pas snabbt, mycket å ofta att buffern blir full.

Exakt. Jag hade velat ha mer kontroll på själva skrivningen också. Inte nöja mig med fclose() bara.

Av Sweedland
Skrivet av aragon:

@Sweedland: är du säker på att det är kortet som strular? använder du kortläsaren i fronten på datorn eller en usb kortläsare?
testa att sätta kortläsaren i bakänden av datorn och då i en usb 2 port ( om det inte är en usb 3 kortläsare)
Brukar se problem när jag för över många små filer från sd kort om jag inte gör som ovan.
är det skrivfel på kortet från när filen skapades kan det ge intressanta fel såsom omöjligt att flytta filen mm

Aragon. Det är SD-kortet till Raspberry:n. Sorry. Lade tråden under enkortsdator men missade detaljen med RPi.

Av Sweedland

Frågan kanske skulle ha varit "Måste man handskas annorlunda med skriv/läs av filer på ett SD-kort relativt vanlig hårddisk?". Jag tänker då inte på antalet skrivningar/läsningar utan mer på om det måste till extra delayer efter stängning av filer eller annan form av "specialbehandling".

Av Sweedland

Det är svårt att förklara och "informera" mest på grund av problemet uppträder i funktioner som fungerar felfritt men vid intensiv användning av dessa funktioner så börjar filer på SD-kortet att vägra skriva om sig. När jag startar om programmet så fungerar det igen - EN gång. Sen inte mer (vid intensiv användning av funktionen som skriver på SD-kortet). Jag fick då en aning om att stängningen av filen inte fungerade så att NÄSTA användning av filen inte blev riktig. Lade in error-utskrifter och kollade retur-värden men det gav ingenting från vare sig fopen eller fclose.
Det var då jag började misstänka SD-kortet (som är av känt märke).
Så det är en "känsla" jag har. En "känsla" av att det kan vara nåt utanför koden som spökar. Därför ställer jag en fråga här om andra har upplevt att kortet inte alltid uppför sig korrekt. Speciellt vid intensiv skrivning.

Av Sweedland

SD-kortet har hyss för sig?

Har nån här upplevt att SD-kortets funktion tillsammans med fopen/fclose och de vanliga fprintf/fscanf kan vara sämre?
Jag har en del oförklarliga fenomen när jag skriver till SD-kortet och jag har granskat koden och kan inte se några fel.
Har gjort logg på returvärdet på samtliga ingående funktioner och ser inga fel.
Jag begriper inte.
Nu lägger jag över de filerna till RAM-disk och testar där. Filerna är flyktiga ialla fall så det spelar ingen roll.
Men vill gärna höra era erfarenheter av filhantering (av många filer) på ett SD-kort.

Av Sweedland
Skrivet av JohnSport:

Finns kanske en möjlighet att lägga upp ett serviceavtal med någon IT-firma i närheten. Någon som kan bygga ihop en bra lösning till er, och som kan underhålla servern. Firman kan ju då också ta hand om alla andra delar av systemet också såsom: datorer, internet m.m

Om det nu inte är så att ni har någon som älskar detta med IT på företaget vill säga.

Jo. Vi har en möjlig samarbetspartner i närheten. Det kan vara en (del) lösning. Vi har haft en här som "älskar" nätverk men han förde med sig en könssjukdom tror jag. Det är amputation som gäller nu.

Av Sweedland

Många bra synpunkter att ta till sig. Ni pratar om sånt jag aldrig behövt peta på. Fördelen med Forum är att kommentarerna är opartiska till skillnad mot säljare.

Med tanke på det ni säger så verkar det behövas en server. Jag antar att det beror på att den hanterar gemensamma files o folders effektivt. Dessutom logins och det affärssystem jag nämnde.

Av Sweedland

Litet företag med kass server. Nytänk behövs. Vad?

Jobbar på ett litet konsult-företag med 5 personer. Det finns en kass server driven av Windows Server eller nåt. Den servern driver ett mindre affärssystem(?) (Prodtime). Jag själv undviker o lägga filer (eller arbeta mot LAN) pga "skakigheten". Jag jobbar lokalt och sen gör jag backuper mot gemensam filplats. Nu muttras det som ett mantra "måste byta server". Orsak? När den ena personen slår på sin dator så däckar trafiken till administratören. 10 min väntetid på nåt dokument. Han är less på servern. Innan vi rusar på o installerar ny server vill jag tänkte ett steg längre. Vill lägga ett förslag på ett måndagsmöte. Därav detta inlägg.
Vad behöver vi? Plats att lagra gemensamma filer som vi kan komma åt utifrån, folders som kunder kan komma åt, affärssystemet med bla stämpla in o ut jobb, daglig backup.

Så min fråga är:
Måste vi ha en server? Finns affärssystem att lägga på en egen vanlig jäkla dator med utdelad katalog så folk kan stämpla? Vi behöver stämpling, löner, lager o budget liggande på det systemet.
Finns det nyare "moln" som man kan ha internt och vissa folders är utdelade till kunder?
Vad ska vi ha för gemensam plats, typ Projekt-foldern?

Vi använder inga tunga grafiska program mot nån gemensam dator. Det är lite dokument hit o dit och lite enklare CAD-filer.

Kom gärna med idéer. Tack.

Av Sweedland
Skrivet av Thomas:

Om alla defines följer ett simplare mönster som ditt exempel så kan man skapa ett verktyg för att konvertera dem automatiskt ganska enkelt.
Det som behövs (för min lösning) är ett Linux/*nix/kompatibelt shell (Linux/*BSD/OS X/Windows med Windows Subsystem for Linux installerat).

Exempelvis, om vi har följande i test.h:
#define TEST_A "/home/user/tmp"
#define MIN_DEFINE_2 "..."
#define ABC 123

så kan man köra

cat test.h | perl -nE '/^#define ([^ ]+) "?([^\r\n"]+)"?/mg && say "define(\"$1\", \"$2\");"'

och få tillbaka

define("TEST_A", "/home/user/tmp");
define("MIN_DEFINE_2", "...");
define("ABC", "123");

Kan bli strul t ex om det är escape:ade citattecken i define-strängarna.

Bra! Jag gillar detta! Alla #defines är enkla utan specialtecken å sånt. Du nyttjar alltså Perl? Jag har de delar jag behöver för att åstadkomma detta.
Jag ska analysera parametrarna. Jag anar vad 'say' står för...