publiek:ltfs_en_tape
Verschillen
Dit geeft de verschillen weer tussen de geselecteerde revisie en de huidige revisie van de pagina.
| Beide kanten vorige revisieVorige revisieVolgende revisie | Vorige revisie | ||
| publiek:ltfs_en_tape [2025/11/23 16:36] – admin | publiek:ltfs_en_tape [2025/12/05 09:06] (huidige) – admin | ||
|---|---|---|---|
| Regel 1: | Regel 1: | ||
| ======LTFS en Tape====== | ======LTFS en Tape====== | ||
| + | |||
| + | =====Hardware===== | ||
| + | Als eerste kun je controleren of de PCI-kaart geïnstalleerd is. Dat doe je met het volgende commando: | ||
| + | < | ||
| + | lspci | ||
| + | </ | ||
| + | Daar kun je iets zien van bijv. Fibre Channel ... | ||
| + | |||
| + | Met het volgende commando kun je zien welke devices er zijn. Dit kunnen bijvoorbeeld harddisks, maar ook de tapestreamers zijn: | ||
| + | < | ||
| + | lsscsi -g | ||
| + | </ | ||
| + | |||
| + | Je ziet hier in de laatste twee kolommen zowel een stx en sgx. Dit zijn twee interfaces naar dezelfde hardware. | ||
| + | - STx = tape-interfacae : data/ | ||
| + | - SGx = direct SCSI : Status/ | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Je kunt sgY niet simpelweg “omrekenen” naar stX op basis van nummers; die tellers lopen onafhankelijk. De koppeling maak je via hetzelfde SCSI-adres (zoals ik eerder liet zien met sysfs/ | ||
| + | |||
| + | |||
| + | =====Tapedrive====== | ||
| + | Om informatie over de drive zelf uit te lezen kun je het volgende doen: | ||
| + | < | ||
| + | sudo sg_logs -a /dev/sg3 | ||
| + | </ | ||
| + | |||
| + | Dan krijg je mogelijk de volgende output: | ||
| + | < | ||
| + | Device statistics log page (ssc-3 and adc) | ||
| + | Lifetime media loads: 2200 | ||
| + | Lifetime cleaning operations: 6 | ||
| + | Lifetime power on hours: 61183 | ||
| + | Lifetime media motion (head) hours: 11204 | ||
| + | Lifetime metres of tape processed: 132126786 | ||
| + | </ | ||
| + | |||
| + | Wanneer het lang geleden is dat een tape gereinigd is, kun je een cleaning-tape laden. Dan wordt de drive automatisch gereinigd. | ||
| + | |||
| + | Als je benieuwd bent hoe oud een tape is, dan kun je dat uitlezen met: | ||
| + | < | ||
| + | ./ | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | Er is een script waarmee je een test kunt doen om data te schrijven naar en lezen van tape. Hiervoor moet je een tape in de drive doen en het volgende commando geven (voor een test met 50Gb).: | ||
| + | < | ||
| + | sudo TAPE_DEV=/ | ||
| + | </ | ||
| + | De map / | ||
| + | |||
| =====WORM===== | =====WORM===== | ||
| Regel 12: | Regel 64: | ||
| < | < | ||
| ./ | ./ | ||
| + | </ | ||
| + | |||
| + | ====Doorlopen van de tape==== | ||
| + | ===Terugspoelen naar begin van de tape=== | ||
| + | < | ||
| + | mt -f /dev/nst0 rewind | ||
| + | </ | ||
| + | |||
| + | ===Tonen welke tar op die plek staat=== | ||
| + | < | ||
| + | tar -tvf /dev/nst0 | ||
| + | </ | ||
| + | |||
| + | ===Naar volgende en vorige set=== | ||
| + | < | ||
| + | mt -f /dev/nst0 fsf 1 | ||
| + | </ | ||
| + | < | ||
| + | mt -f /dev/nst0 bsfm 1 | ||
| + | </ | ||
| + | Daarna weer tonen. | ||
| + | |||
| + | ====Naar einde==== | ||
| + | Met dit commando kun je naar het einde van de tape schrijven: | ||
| + | < | ||
| + | mt -f /dev/nst0 eod | ||
| </ | </ | ||
| Regel 26: | Regel 104: | ||
| Anders worden het losse sets. | Anders worden het losse sets. | ||
| + | |||
| + | ====Tape afsluiten==== | ||
| + | Je kunt aan het einde van de tape een EOF schrijven: | ||
| + | < | ||
| + | sudo mt -f /dev/nst0 weof 1 | ||
| + | </ | ||
| + | |||
| + | ====Tape terugspoelen==== | ||
| + | Terugspoelen kan handmatig door het volgende commando | ||
| + | < | ||
| + | sudo mt -f /dev/nst0 rewind | ||
| + | </ | ||
| ====Data teruglezen==== | ====Data teruglezen==== | ||
| Regel 35: | Regel 125: | ||
| ---- | ---- | ||
| + | |||
| + | =====LTFS===== | ||
| + | Een tape als LTFS gebruiken kan. Dan moet je wel een aantal dingen doen. Hiervoor heb je de volgende commando' | ||
| + | |||
| + | Dit kun je controleren met: | ||
| + | < | ||
| + | which ltfs mkltfs ltfsck | ||
| + | </ | ||
| + | |||
| + | ====LTFS Tape formatteren==== | ||
| + | De tape wordt geformatteerd met het volgende commando: | ||
| + | < | ||
| + | sudo mkltfs -d /dev/sg3 | ||
| + | </ | ||
| + | Zet er -f achter als je zeker weet dat je alles weg wilt gooien. | ||
| + | |||
| + | Vervolgens kun je een volumenaam aangeven: | ||
| + | < | ||
| + | sudo mkltfs -d /dev/sg3 -n " | ||
| + | </ | ||
| + | |||
| + | ====Tape mounten==== | ||
| + | Vervolgens kun je de tape mounten met het volgende commando: | ||
| + | < | ||
| + | ltfs -o devname=/ | ||
| + | </ | ||
| + | |||
| + | ====Tape unmounten==== | ||
| + | Aan het einde moet je altijd de tape unmounten. Dat gaat met het volgende commando: | ||
| + | < | ||
| + | sudo umount /mnt/ltfs | ||
| + | </ | ||
| + | |||
| + | =====Handige kopieeropdrachten===== | ||
| + | Als je wilt zien hoe het kopiëren gaat dan kun je pv gebruiken. Eerst installeren: | ||
| + | < | ||
| + | sudo dnf install pv | ||
| + | </ | ||
| + | |||
| + | Daarna kun je het volgende commando gebruiken om iets te kopiëren: | ||
| + | < | ||
| + | pv -s " | ||
| + | </ | ||
| + | Daarbij wordt de tool gestart met de grootte waardoor je kunt zien hoe lang het gaat duren. | ||
| + | |||
| + | Dit commando heb ik in een copy.sh gezet waarmee ik niet alle informatie hoef te kennen. De broncode staat beneden. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | =====Tapeloader===== | ||
| + | Je kunt de tapeloader uitlezen met het volgende commando : | ||
| + | < | ||
| + | sudo mtx -f /dev/sch0 status | ||
| + | </ | ||
| + | |||
| =====Broncodes===== | =====Broncodes===== | ||
| - | ===list_size.sh=== | + | ====list_size.sh==== |
| < | < | ||
| sudo sg_logs -p 0x31 /dev/sg3 \ | sudo sg_logs -p 0x31 /dev/sg3 \ | ||
| Regel 50: | Regel 195: | ||
| </ | </ | ||
| - | ==list_all_sets.sh=== | + | ====list_all_sets.sh==== |
| < | < | ||
| # | # | ||
| Regel 73: | Regel 218: | ||
| fi | fi | ||
| i=$((i+1)) | i=$((i+1)) | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | ====testdrive.sh==== | ||
| + | < | ||
| + | # | ||
| + | set -euo pipefail | ||
| + | |||
| + | ############################ | ||
| + | # LTO-6 drive/tape test | ||
| + | # Destructief: | ||
| + | # | ||
| + | # Vereisten: | ||
| + | # dnf install mt-st sg3_utils coreutils | ||
| + | # | ||
| + | # Devices: | ||
| + | # | ||
| + | # | ||
| + | ############################ | ||
| + | |||
| + | TAPE_DEV=" | ||
| + | SCSI_DEV=" | ||
| + | |||
| + | # Test parameters | ||
| + | TEST_DIR=" | ||
| + | TEST_FILE=" | ||
| + | READBACK_FILE=" | ||
| + | HASH_FILE=" | ||
| + | |||
| + | # Size in MiB (10240 MiB = 10 GiB) | ||
| + | TEST_SIZE_MIB=" | ||
| + | BS_MIB=" | ||
| + | |||
| + | log() { echo -e "\n== $* =="; } | ||
| + | |||
| + | require_root() { | ||
| + | if [[ $EUID -ne 0 ]]; then | ||
| + | echo "Run dit script als root (sudo)." | ||
| + | exit 1 | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | check_cmds() { | ||
| + | local missing=0 | ||
| + | for c in mt sg_logs dd sha256sum egrep awk; do | ||
| + | if ! command -v " | ||
| + | echo "Mist commando: $c" | ||
| + | missing=1 | ||
| + | fi | ||
| + | done | ||
| + | [[ $missing -eq 0 ]] || exit 1 | ||
| + | } | ||
| + | |||
| + | confirm_destructive() { | ||
| + | cat <<EOF | ||
| + | WAARSCHUWING: | ||
| + | en OVERSCHRIJFT ALLE DATA op de geladen tape. | ||
| + | |||
| + | Typ exact: YES (zonder quotes) om door te gaan. | ||
| + | EOF | ||
| + | read -r answer | ||
| + | if [[ " | ||
| + | echo " | ||
| + | exit 0 | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | mt_status() { | ||
| + | sudo mt -f " | ||
| + | } | ||
| + | |||
| + | pre_checks() { | ||
| + | log " | ||
| + | mt_status | ||
| + | |||
| + | log " | ||
| + | if sudo sg_logs --page=0x2e " | ||
| + | echo "Let op: er staan TapeAlert flags aan." | ||
| + | else | ||
| + | echo "Geen actieve TapeAlerts." | ||
| + | fi | ||
| + | |||
| + | log "Read counters (voor test)" | ||
| + | sudo sg_logs --page=0x03 " | ||
| + | |||
| + | log "Write counters (voor test)" | ||
| + | sudo sg_logs --page=0x02 " | ||
| + | |||
| + | log " | ||
| + | sudo sg_logs --page=0x14 " | ||
| + | } | ||
| + | |||
| + | generate_test_data() { | ||
| + | log "Maak testdata (${TEST_SIZE_MIB} MiB) + checksum" | ||
| + | mkdir -p " | ||
| + | rm -f " | ||
| + | |||
| + | # gebruik / | ||
| + | dd if=/ | ||
| + | log " | ||
| + | sha256sum " | ||
| + | } | ||
| + | |||
| + | write_to_tape() { | ||
| + | log " | ||
| + | mt -f " | ||
| + | mt -f " | ||
| + | |||
| + | log " | ||
| + | dd if=" | ||
| + | |||
| + | log " | ||
| + | mt -f " | ||
| + | mt -f " | ||
| + | } | ||
| + | |||
| + | readback_and_verify() { | ||
| + | log "Lees terug van tape" | ||
| + | dd if=" | ||
| + | |||
| + | log " | ||
| + | sha256sum -c " | ||
| + | } | ||
| + | |||
| + | post_checks() { | ||
| + | log "Read counters (na test)" | ||
| + | sudo sg_logs --page=0x03 " | ||
| + | |||
| + | log "Write counters (na test)" | ||
| + | sudo sg_logs --page=0x02 " | ||
| + | |||
| + | log " | ||
| + | if sudo sg_logs --page=0x2e " | ||
| + | echo "Let op: er staan TapeAlert flags aan." | ||
| + | else | ||
| + | echo "Geen actieve TapeAlerts." | ||
| + | fi | ||
| + | |||
| + | log " | ||
| + | sudo sg_logs --page=0x14 " | ||
| + | } | ||
| + | |||
| + | summary() { | ||
| + | log " | ||
| + | echo "1) Checksum OK? -> hierboven moet ' | ||
| + | echo "2) Uncorrected read/write errors moeten 0 zijn." | ||
| + | echo "3) TapeAlert na test liefst leeg." | ||
| + | echo | ||
| + | echo "Als je wilt dat ik oordeel geef: plak pre/post counters + TapeAlert hier." | ||
| + | } | ||
| + | |||
| + | main() { | ||
| + | require_root | ||
| + | check_cmds | ||
| + | confirm_destructive | ||
| + | pre_checks | ||
| + | generate_test_data | ||
| + | write_to_tape | ||
| + | readback_and_verify | ||
| + | post_checks | ||
| + | summary | ||
| + | } | ||
| + | |||
| + | main " | ||
| + | </ | ||
| + | |||
| + | ====tapeinfo.sh==== | ||
| + | < | ||
| + | # | ||
| + | set -euo pipefail | ||
| + | |||
| + | # Toon hoe vol een LTO-tape is via SCSI Tape Capacity page (0x31). | ||
| + | # Vereist: mt, sg_logs, awk (gawk), grep | ||
| + | # | ||
| + | # Gebruik: | ||
| + | # sudo ./ | ||
| + | # sudo ./ | ||
| + | # | ||
| + | # Devices kun je overrulen via env: | ||
| + | # sudo TAPE_DEV=/ | ||
| + | |||
| + | TAPE_DEV=" | ||
| + | SCSI_DEV=" | ||
| + | DO_EOD=1 | ||
| + | |||
| + | if [[ " | ||
| + | DO_EOD=0 | ||
| + | fi | ||
| + | |||
| + | log() { echo -e "\n== $* =="; } | ||
| + | |||
| + | need_root() { | ||
| + | if [[ $EUID -ne 0 ]]; then | ||
| + | echo "Run dit script met sudo/ | ||
| + | exit 1 | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | check_cmds() { | ||
| + | for c in mt sg_logs awk grep; do | ||
| + | if ! command -v " | ||
| + | echo "Mist commando: $c" | ||
| + | exit 1 | ||
| + | fi | ||
| + | done | ||
| + | } | ||
| + | |||
| + | show_status() { | ||
| + | mt -f " | ||
| + | } | ||
| + | |||
| + | to_eod() { | ||
| + | if [[ $DO_EOD -eq 1 ]]; then | ||
| + | log " | ||
| + | mt -f " | ||
| + | else | ||
| + | log "EOD overslaan (--no-eod)" | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | read_capacity() { | ||
| + | sg_logs --page=0x31 " | ||
| + | } | ||
| + | |||
| + | main() { | ||
| + | need_root | ||
| + | check_cmds | ||
| + | |||
| + | log " | ||
| + | show_status | ||
| + | |||
| + | to_eod | ||
| + | |||
| + | log "Tape Capacity log page (0x31)" | ||
| + | page=" | ||
| + | |||
| + | rem=$(echo " | ||
| + | max=$(echo " | ||
| + | |||
| + | if [[ -z " | ||
| + | echo "Kon geen geldige capaciteit uitlezen." | ||
| + | echo "Zorg dat er een tape ONLINE is en probeer opnieuw." | ||
| + | exit 2 | ||
| + | fi | ||
| + | |||
| + | used=$(( max - rem )) | ||
| + | |||
| + | pct_used=$(awk -v u=" | ||
| + | pct_free=$(awk -v r=" | ||
| + | |||
| + | used_gib=$(awk -v u=" | ||
| + | rem_gib=$(awk -v r=" | ||
| + | max_gib=$(awk -v m=" | ||
| + | |||
| + | log "Tape capaciteitsrapport" | ||
| + | echo "Tape device : $TAPE_DEV" | ||
| + | echo "SCSI device : $SCSI_DEV" | ||
| + | echo | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | } | ||
| + | |||
| + | main " | ||
| + | </ | ||
| + | |||
| + | ====Copy.sh==== | ||
| + | < | ||
| + | # | ||
| + | set -euo pipefail | ||
| + | |||
| + | echo "=== PV copy tool (1 bestand) ===" | ||
| + | echo | ||
| + | |||
| + | # Vraag bronbestand | ||
| + | read -r -e -p " | ||
| + | |||
| + | if [[ -z " | ||
| + | echo "Geen bron opgegeven, exit." >&2 | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | if [[ ! -f " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # Vraag doelfolder | ||
| + | read -r -e -p " | ||
| + | |||
| + | if [[ -z " | ||
| + | echo "Geen doelfolder opgegeven, exit." >&2 | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # Maak doelfolder indien nodig | ||
| + | mkdir -p " | ||
| + | |||
| + | # Vraag optioneel doelnaam | ||
| + | DEFAULT_NAME=" | ||
| + | read -r -e -p " | ||
| + | DST_NAME=" | ||
| + | |||
| + | DST=" | ||
| + | |||
| + | # Overschrijf-check | ||
| + | if [[ -e " | ||
| + | echo | ||
| + | echo " | ||
| + | read -r -p " | ||
| + | case " | ||
| + | y|Y|yes|YES) | ||
| + | echo "Oké, ik overschrijf het bestand." | ||
| + | ;; | ||
| + | *) | ||
| + | echo " | ||
| + | exit 0 | ||
| + | ;; | ||
| + | esac | ||
| + | fi | ||
| + | |||
| + | echo | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo | ||
| + | |||
| + | # Kopie met pv + size voor nette ETA | ||
| + | pv -s " | ||
| + | |||
| + | echo | ||
| + | echo " | ||
| + | ls -lh " | ||
| + | </ | ||
| + | |||
| + | ====tape-age.sh==== | ||
| + | < | ||
| + | for id in 0x0400 0x0401 0x0406 0x0806 0x0803 0x0003 0x0222 0x0223 0x0220 0x0221; do | ||
| + | sudo sg_read_attr -f $id /dev/sg4 | ||
| done | done | ||
| </ | </ | ||
publiek/ltfs_en_tape.1763912185.txt.gz · Laatst gewijzigd: door admin
