FIZ(1)

πŸ“¦ version 2.10, in opensuse-leap 16.0

πŸ’… FIZ(1) β€” the General Commands Manual, but make it group chat

okay so this is fiz, from section 1 of the General Commands Manual. grab a snack, bestie, we're doing data recovery πŸ“


✨ NAME ✨

fiz β€” analyze damaged zoo archive for data revovery

(yes, "revovery" β€” we keep the typo, it's canon now πŸ’€)


πŸŽ€ SYNOPSIS πŸŽ€

fiz archive[.zoo]

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so fiz is literally the friend you call when your zoo archive is in shambles 😭. It analyzes damaged zoo archives and locates directory entries and file data inside them. The current version of fiz is 2.0, and it's meant to be used in conjunction with zoo version 2.0 β€” they're a matched set, iykyk 🫢.

Here's the iconic part: fiz makes no assumptions about archive structure. None. Zero. It literally just searches the entire subject archive for tag values that mark the locations of directory entries and file data. That's the whole vibe check.

so what are those things? πŸ’– In a zoo archive, a directory entry contains information about a stored file β€” its name, whether it's compressed or not, and its timestamp. The file data is the actual data for the archived file, and it may be either the original data, or the result of compressing the file. two different things, both main character energy ✨.

For each directory entry it finds, fiz prints:

  • where in the archive it is located πŸ“
  • the directory path and filename(s) found in it πŸ“
  • whether the directory entry appears to be corrupted β€” indicated by [*CRC Error*] πŸ’€
  • the value of the pointer to the file data that's found in the directory entry πŸ”—

For each block of file data found in the archive, fiz prints where in the archive the block begins πŸ“.

In the case of an undamaged archive, the pointer to file data found in a directory entry will correspond to where fiz actually locates the data. Slay. Here's some sample output from fiz:

****************
    2526: DIR  [changes] ==>   95
    2587: DATA
****************
    3909: DIR  [copyrite] ==> 1478
    3970: DATA
    4769: DATA
****************

so in that output, DIR indicates where fiz found a directory entry in the archive, and DATA indicates where fiz found file data in the archive. Filenames located by fiz are enclosed in square brackets [ ], and the notation ==> 95 indicates that the directory entry found by fiz at position 2526 has a file data pointer to position 95. πŸ”

but here's the plot twist 😭 β€” in actuality, fiz found file data at positions 2587, 3970, and 4769. Since fiz found only two directory entries, and each directory entry corresponds to one file, one of the file data positions is an artifact. not me crying over a stray byte πŸ’€.

Once the locations of directory entries and file data are found, the @ modifier to zoo's archive list and extract commands can be used, and the archive contents selectively listed or extracted, skipping the damaged portion. This is further described in the documentation for zoo(1) πŸ“–.

In the above case, commands to try giving to zoo might be:

  • x@2526,2587 β€” extract beginning at position 2526, and get file data from position 2587
  • x@3090,3970 β€” extract at 3090, get data from 3970
  • x@3909,4769 β€” extract at 3909, get data from 4769

Once a correctly-matched directory entry/file data pair is found, zoo will in most cases synchronize with and correctly extract all files subsequently found in the archive. Trial and error should allow all undamaged files to be extracted πŸ™ˆ. It's giving "brute force but make it fashion" πŸ’….

Also note β€” and this is lowkey such a cool detail β€” that self-extracting archives created using sez (the Self-Extracting Zoo utility for MS-DOS), which are normally executed on an MS-DOS system for extraction, can be extracted on non-MSDOS systems in a similar way 🌈.


πŸ”₯ SEE ALSO πŸ”₯


πŸ’€ BUGS πŸ’€

Random byte patterns can occasionally be incorrectly recognized as tag values 😭. This occurs very rarely, however, and trial and error will usually permit all undamaged data to be extracted. so like... it's fine. probably. mostly. 🫢


⭐ DIAGNOSTICS ⭐

fiz always exits with a status code of 0. Always. No notes. periodt πŸ‘‘.


🌸 FUTURE DIRECTIONS 🌸

Automation of data recovery from a damaged archive is potentially achievable πŸ‘€. However, since damaged archives occur only rarely, fiz as it currently stands is unlikely to change much in the near future. honestly? respect the consistency ✨.


πŸ’œ AUTHOR πŸ’œ

Rahul Dhesi


and that's the whole page, bestie! πŸŽ€ this version is dated Jan 31, 1988 β€” yep, an absolute icon from the 80s still out here doing data recovery β€” brought to you from the FIZ(1) page of the General Commands Manual. go fix that archive fr fr πŸ’–πŸ¦‹

πŸ“¦ where this page comes from