Supponiamo di scoprire dati aziendali critici in un file di foglio di calcolo DOS legacy e che Excel non sia in grado di leggere il file. Se il programma legacy era originariamente eseguito in DOS, puoi avviare una copia di FreeDOS e installare lì il programma legacy per estrarre o esportare i dati in un formato di file comune, come file CSV separato da virgole.
Puoi seguire le nostre istruzioni per installare e avviare FreeDOS utilizzando la macchina virtuale QEMU. Ma avendo installato FreeDOS, Come si installa ed esegue il programma legacy in QEMU?
Puoi montare un'immagine disco QEMU usando due metodi di base: utilizzando un offset per montare direttamente l'immagine, o usando il libguestfs-tools
pacchetto.
Linux può montare il formato immagine del disco raw di QEMU, supponendo che tu sappia dove trovare l'inizio della partizione dell'unità C: sul disco virtuale. Il disco virtuale può contenere più partizioni, ma per la maggior parte delle installazioni di sistemi operativi legacy come DOS, Probabilmente hai solo una partizione. Questa è l'unità C :.
Diamo un'occhiata all'output di Linux fdisk
Programma. Usando il -l
L'opzione consente di visualizzare un elenco di partizioni sul disco virtuale:
$ fdisk -l image.img Disco image.img: 100 MiB, 104857600 byte, 204800 Settori Unità: settori di 1 * 512 = 512 bytes Sector size (logico/fisico): 512 byte / 512 bytes I/O size (minimo/ottimale): 512 byte / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Avvio del dispositivo Inizio Fine Settori Dimensione Id Tipo image.img1 * 63 204623 204561 99.9m 6 FAT16
Qui, guidare C: è la prima e unica partizione sull'unità virtuale, elencato come image.img1
Per impostare l'offset dell'unità C :, devi conoscere il settore di avvio di quella partizione. L'uscita di fdisk
mostralo come 63.
Per calcolare lo spostamento, devi anche conoscere la dimensione del settore. Questa immagine del disco virtuale ha settori di 512 byte. Calcola la compensazione come il prodotto della compensazione e la dimensione del settore: 63 × 512 = 32256.
Usa questo valore di offset per montare l'unità C: virtuale da Linux:
$ mkdir /tmp/dos
$ sudo mount -o loop,offset=32256 image.img /tmp/dos
$ ls /tmp/dos
AUTOEXEC.BAT COMMAND.COM FDCONFIG.SYS FDOS KERNEL.SYS
$ sudo umount /tmp/dos
È possibile automatizzare il calcolo tramite uno script Bash. Lo script deve prima raccogliere i valori in un formato facilmente analizzabile. Sul mio sistema Linux, Utilizzare il comando -o
opzione con fdisk
Per specificare le colonne da stampare. Come ho solo bisogno di abbinare la partizione (Dispositivo) e il valore Start, Io uso questo fdisk
per elencare le colonne di cui ho bisogno:
$ fdisk -l -o Dispositivo,Avviare image.img Disco image.img: 100 MiB, 104857600 byte, 204800 Settori Unità: settori di 1 * 512 = 512 bytes Sector size (logico/fisico): 512 byte / 512 bytes I/O size (minimo/ottimale): 512 byte / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Avvio del dispositivo image.img1 63
E uno script Bash può analizzare quell'output usando Gawk per calcolare l'offset da solo.:
#!/cestino/bash # uso: qemu-mount {file immagine} # 1argomento st: QEMU raw image file if [ $# -Nato 1 ] ; then echo 'usage: qemu-mount imagefile' echo 'Mounts a QEMU raw image file to /tmp/dos' exit 1 fi start=$( fdisk -l -o Dispositivo,Inizio ${1} | grep "^${1}1" | gawk'{Stampa $2}' ) settori=$( fdisk -l ${1} | grep '^Unità: settori di» | gawk'{Stampa $(NF-1 ·)}' ) offset=$(( $cominciare * $Settori )) [ -d /tmp/due ] || mkdir /tmp/dos sudo mount -o loop,offset=$offset ${1} /tmp/due
Dopo aver montato l'immagine del disco virtuale QEMU sul /tmp/dos
punto di montaggio temporaneo, può leggere e scrivere dati sull'unità C: virtuale. Questo è un modo pratico per copiare un programma di installazione di un programma legacy nella macchina virtuale o copiare dati all'esterno della macchina virtuale. Nonostante questo, dovresti montare l'immagine del disco virtuale solo quando QEMU non è in esecuzione. Se provi a montare un'immagine del disco QEMU mentre è in uso, può corrompere il disco virtuale.
Quando hai finito di inserire l'immagine del disco virtuale da Linux, non dimenticare di smontare l'immagine con il umount
comando.
il libguestfs-tools
Il pacchetto fornisce una serie di strumenti per accedere alle immagini del disco della macchina virtuale. Incluso in questo toolkit è guestmount
, che rende davvero facile montare un'immagine disco QEMU da Linux. Se la tua distribuzione non include questo pacchetto per impostazione predefinita, potrebbe essere necessario installare il libguestfs software separatamente. Nonostante questo, molte distribuzioni Linux, compresa Fedora, Red Hat Enterprise Linux, Debian e Ubuntu forniscono un libguestfs-tools
pacchetto che puoi installare tramite il tuo gestore di pacchetti.
Due opzioni dicono guestmount
come inserire l'immagine del disco QEMU. il --add imagefile
L'opzione specifica l'immagine del disco virtuale con cui lavorare e il --mount device
opzione dice guestmount
quale partizione usare dall'immagine del disco. Devi puntare il dispositivo attraverso un percorso Linux standard, Che cosa /dev/sda1
per la prima partizione nell'immagine del disco virtuale.
Con queste due opzioni, montare l'immagine del disco virtuale da Linux è un comando a riga singola:
guestmount --add image.img --mount /dev/sda1 /tmp/dos
Dopo un momento, questo monta l'unità C: virtuale su punto di montaggio temporaneo / tmp / A partire dal. Può inserire file immagine del disco virtuale /tmp/dos
utilizzando strumenti Linux standard, Che cosa cp
e mv
, per copiare i dati dentro e fuori il disco virtuale. Fare attenzione a montare l'immagine del disco solo quando QEMU non è in esecuzione, o potrebbe danneggiare il disco virtuale.
Quando hai finito con l'unità C: virtuale, puoi smontare il filesystem usando il guestunmount
comando.