Portál AbcLinuxu, 14. května 2025 01:42

Dotaz: Jak přečíst blok znaků z pásky?

3.6.2007 20:26 Stanislav Karpíšek
Jak přečíst blok znaků z pásky?
Přečteno: 220×
Odpovědět | Admin
Poraďte prosím, jak jde z pásky (/dev/nst0) přečíst blok znaků a zapsat do souboru a naopak jak ze souboru blok znaků zapsat na pásku? Moc to spěchá. Předem díky.

Stanley
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.6.2007 22:26 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
Odpovědět | | Sbalit | Link | Blokovat | Admin
A čo si už skúšal a s akým výsledkom?

man mt dd
3.6.2007 22:29 Stanislav Karpíšek
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
zkoušel jsem dd if=/dev/nst0 of=/home/soubor count=1024 s výsledkem, že nejde alokovat paměť, nic lepšího mě nenapadlo
3.6.2007 23:08 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
Nezadals velikost bloku

dd if=/dev/nst0 of=/home/soubor count=1024 bs=xxx

Takže zadej bs, případně nám tu napiš přesně jak ta hláška zněla, v originále tj:

LANG="C" dd if=/dev/nst0 of=/home/soubor count=1024 bs=xxx
4.6.2007 07:23 Stanislav Karpíšek
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Už jsem na to přišel. Musel jsem hlavně zjistiti velikost bloku na pásce, takže správný zápis potom je dd if=/dev/nst0 of=/home/pokus bs=4096 count=8192 což přečte 2 bloky po 4096 byte Díky za reakce.
4.6.2007 07:30 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
To se mi moc nezdá, protože count udává kolik bloků o velikosti bs to má přečíst.
-- Nezdar není hanbou, hanbou je strach z pokusu.
4.6.2007 08:52 Stanislav Karpíšek
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
No fungovalo mi to na zkušební pásce. Ta, na které mám nějaký problémeček leží zatím na bezpečném místě. Takže jsem si vytvořil 1. soubor o velikosti 4096 byte. Ten jsem poslal na pásku příkazem

cat /home/soubor > /dev/nst0

před zápisem jsem byl na bloku 0, po zápise na bloku 1, pokud jsem to samé provedl s 2. souborem o velikosti 4097, byl jsem o 2 bloky dále, z toho jsem usoudil, že velikost bloku je 4096 byte. Pak jsem provedl čtení příkazem

dd if=/dev/nst0 of=/home/vystup1 bs=4096 count=4096

a objevil se mi skutečně originální 1. soubor, pak jsem dal příkaz

dd if=/dev/nst0 of=/home/vystup2 bs=4096 count=8192

a objevil se mi originální 2. soubor o velikosti 4097 byte. Tak jsem si myslel, že je to OK. Pak jsem si vložil pásku, na které potřebuji vyřešit nějaký problém a když jsem zadal čtení přes dd viz výše ohlásí to

dd: reading `/dev/nst0': Cannot allocate memory 0+0 records in 0+0 records out

A teď jsem docela v kopru a nevím, co s tím. Poraďte prosím.
4.6.2007 09:36 Stanislav Karpíšek
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Možná bych měl říct, co mám za problém a čeho chci dosáhnout. Na serveru probíhají zálohy na pásku přes příkaz

find /home/... | cpio -oB | gzip > /dev/nst0

což funguje celkem fajn. Má to některé nedostatky, mimo jiné ten, co se mi povedl. Povedlo se mi nakopnout prvních 321 bloků na pásce se zálohou a teď bych tam potřeboval z jiné pásky, která má stejný začátek těch 321 bloků přehrát, tj. z jedné pásky potřebuji ty bloky načíst do nějakého souboru a na nakopnutou pásku je přehrát. Zachránilo by mi to život nebo aspoň krk.
4.6.2007 21:21 Stanislav Karpíšek
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
Pomůže prosím někdo?
5.6.2007 07:58 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
> povedlo se mi nakopnout prvních 321 bloků na pásce se zálohou a teď bych tam potřeboval z jiné pásky, která má stejný začátek těch 321 bloků přehrát,

Nie je mi celkom jasné, čo myslíš "nakopnutím". Pokiaľ ti ide o to, zobrať prvých 321 blokov z jednej pásky a za ne prilepiť to, čo je za 321. blokom na druhej páske, tak:

na prvej páske: dd if=/dev/nst0 of=/tmp/subor count=321 bs=XY
na druhej páske: dd if=/dev/nst0 of=/tmp/subor skip=321 bs=XY oflag=append

kde XY je velkost bloku.

5.6.2007 08:47 Stanislav Karpíšek
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
No stalo se to, že jsem měl v mechanice zasunutou pásku se zálohou a omylem jsem spustil skript na zálohování, než jsem ho stihl přerušit, přehrálo se mi prvních 321 bloků. Mám ale zálohu z předchozího dne, která má zcela určitě stejný začátek (nevím kam až, ale těch 321 bloků určitě), takže z této pásky si chci vzít začátek a na narušenou pásku ho chci přenést, aby se záznam opravil. Příkaz dd by měl fungovat, ale jak jsem napsal výše, nějak mi nefunguje už to čtení. Nevím, jak mám zjistit velikost bloku, v tom by třeba mohl být problém.
5.6.2007 11:30 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
tapeinfo by mal vediet povedat velkosť bloku.
5.6.2007 15:17 Stanislav Karpíšek
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
příkaz tapeinfo neznám a ani ho můj linux neobsahuje. Použil jsem příkaz

mt -f /dev/nst0 status

a to vypsalo následující:

SCSI 2 tape drive: File number=0, block number=0, partition=0. Tape block size 0 bytes. Density code 0x26 (DDS-4 or QIC-4GB). Soft error count since last status=0 General status bits on (41010000): BOT ONLINE IM_REP_EN

Takže velikost jaksi neznám. Ale možná je chyba někde úplně jinde.
5.6.2007 15:21 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
Popis tapeinfo som našiel googlom. V princípe si to podstatné môžeš naprogramovať sám pomocou informácií o st (kľúčové slová MTIOCGET, mt_dsreg).
5.6.2007 15:45 Stanislav Karpíšek
Rozbalit Rozbalit vše Re: Jak přečíst blok znaků z pásky?
Odkaz mi pomohl v tom, že jsem zjistil meze velikosti bloku a metodou pokus-omyl jsem se dobral ke kýžené hodnotě 16kB a s tou mi to už konečně funguje. Všem díky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.