イメージの位置とサイズがわかっている場合は、ディスクの未割り当ての空き領域に隠されたisoディスクイメージをどのようにマウントしますか?

イメージの位置とサイズがわかっている場合は、ディスクの未割り当ての空き領域に隠されたisoディスクイメージをどのようにマウントしますか?

iso ディスクイメージは、ディスクの未割り当ての空き領域に隠されていると仮定します。割り当てられていない領域に隠されているため、ファイルシステムでは認識されません。画像の特定の位置とサイズが与えられていると仮定すると、画像をどのようにマウントしますか?

私は2つの異なる解決策が欲しい。解決策の1つは、イメージが保存されているディスクが書き込み禁止であるため、ディスク上のパーティションテーブルを変更または作成できない状況のためです。

もう1つの解決策は、イメージが保存されているディスクが書き込み可能で、ディスクの最初の数GBにamd64バージョン9.2.1用のDebianインストールDVD-1イメージの起動可能なアイソハイブリッドがあると仮定し、ディスクのパーティションテーブルを変更することです。

以下は私が望むものではありません。コマンドを使用して、dd隠し領域から割り当てられた領域に画像をコピーして、結果の重複画像がファイルシステムに表示される通常のファイルになるようにし、結果の画像ファイルをマウントします。画像が保存されている場所から直接画像をインストールしたいと思います。

この問題は、次の状況が原因で発生します。 Debian 9.2.1 インストーラは、3 つの DVD セットに含まれています。 DVD-1はブータブルアイソハイブリッドイメージなので、USBスティックに焼くとイメージがUSBスティックを起動可能にし、DVDを起動可能にします。私は間違いなくDVDよりUSBスティックを好む。 DVD-2とDVD-3は通常のDVDイメージなので、起動できません。これらの画像のサイズと現在市販されているUSBスティックのサイズを考慮すると、3つのDVDイメージをすべて16GB USBスティックに保存するのが理想的です。

DVD-1  3.7GiB  4GB
DVD-2  4.3GiB  4.65GB
DVD-3  4.4GiB  4.7GB

現在、USBフラッシュドライブは8GB、16GB、32GB、または64GBの容量で提供されています。 USBメモリースティックは、USBフラッシュドライブまたはUSBメモリとも呼ばれます。

dd(または)コマンドを使用すると、cpDVD-1イメージをUSBスティックのセクタ0から始めてUSBスティックに焼く必要があります。これにより、USBスティックに4GBのパーティションが作成され、USBスティックに12GBが使用されていないままになります。自由空間。 USBメモリースティック。これにより、ddDVD-2とDVD-3は、ファイルシステムに隠されている未割り当て領域に書き込むことができます。

次のbashスクリプトは、amd64用のDebian 9.2.1の3つのDVDイメージをダウンロードすると、通常、イメージを/dev/sdbUSBフラッシュドライブに直接書き込みます。書き込みが完了したら、生成された画像を読み取り、sha1とsha256からチェックサムを計算します。シャー512。 USBスティックが/dev/sdb。 DVD-2 および DVD-3 は未割り当ての空き領域に保存され、ファイルシステムには表示されません。

警告:このスクリプトはデバイス名でディスクを上書きし、ディスク上の/dev/sdb既存のデータは削除されます。したがって、初心者は、誤って重要なデータを削除するのを防ぐために、このスクリプトを離れる必要があります。

準備する:

curl、すでにインストールされている必要がありますddopensslcurlダウンロードしてddディスクイメージをUSBスティックに書き込んでから、チェックサムを計算します。opensslすべてのMac OS Xに付属しています。curl一部のLinuxディストリビューションでは利用できますが、curl他のディストリビューションでは利用できません。Debian 9.2.1ではcurlDVDに同梱されています。) 2.) opensslsha1だけでなくsha256とsha512もサポートする必要があります。

USBスティックをマウント解除する必要がありますが、まだ接続されていて取り出してはいけません。

デバイス名がコマンド/dev/sdbに渡されます。ddDVDイメージを書き込むUSBスティックのデバイス名が正しくない場合は、スクリプトを修正して/dev/sdb正しい/dev/sdbデバイス名に変更してください。 Linuxでは、ブートディスクは通常/dev/sda、データディスクは通常/dev/sdb、、/dev/sdcなど/dev/sddです。 Mac OS Xでは、起動ディスクは通常/dev/disk0、データディスクは通常/dev/disk1、、/dev/disk2など/dev/disk3です。

Linuxでデバイス名を見つけるparted -lのに役立ちます。 MacOSXでデバイス名を見つけるには、diskutil listとを実行しますDisk Utility > Info > Disk Identifier

このスクリプトはdd 4Kブロックサイズで渡されます。ここで、サフィックスK(キロ)は1024バイトを意味します。 Mac OS Xでは、大文字の代わりにdd小文字を使用する必要があります。したがって、Mac OS Xでこのスクリプトを実行するには。kKKk

このスクリプトはDVDからDVDイメージをダウンロードしますcdimage.debian.org。距離が遠いと速度が遅くなることがあります。もっと近いミラーに交換したいかもしれません。

#!/bin/bash

par="https://cdimage.debian.org/debian-cd/9.2.1/amd64/iso-dvd/"
    # par for the parent directory of the DVD images on the server.

ua='Mozilla/5.0 ()'  # UserAgent string to be used by curl.

vAry=()  # an array to hold the number of 4K-blocks, which is obtained
         # as the file size of the DVD image divided by 4096,
         # for each of the three DVD images.


# HTTP header
echo "Reading the HTTP header to obtain the file size"
for (( i = 1 ; i <= 3 ; i++ )) ; do
  f="debian-9.2.1-amd64-DVD-${i}.iso"
  url="$par$f"
  header=$(curl -ILRA "$ua" "$url") # HTTP header
  echo "$header"
  nBytes=$(echo "$header" | grep -E 'Content-Length: [1-9][0-9]*' | grep -oE '[1-9][0-9]*')
     # nBytes is the file size in bytes

  if [[ -z $nBytes ]]; then
    echo "${f}:  curl failed. Aborting..."
    exit 1 #@@@@@@@@@@@@@@@@@@@@@@@@@@@
  elif [[ $((nBytes%4096)) -ne 0 ]]; then
    echo "${f}:  nBytes is not divisible by 4096. Aborting..."
    exit 1 #@@@@@@@@@@@@@@@@@@@@@@@@@@@
  fi
  ((nBlk=nBytes/4096)) # the number of 4K-blocks
  vAry+=($nBlk)
  echo "$f   $nBytes   $nBlk"
  echo "${vAry[@]}"
  printf %b '----------------------------------------\n\n\n'
done


if [[ ${#vAry[@]} -eq 0 ]] # the number of elements of the array
then
  echo "The array of nBlk's is empty. Aborting..."
  exit 1 #@@@@@@@@@@@@@@@@@@@@@@@@@@@
fi

printf %b '========================================\n\n\n'

# The file sizes of DVD-1, DVD-2 and DVD-3 of Debian 9.2.1 for amd64 are
# supposed to be 3964551168, 4649189376 and 4692422656 bytes respectively,
# and the number of 4K-blocks to be 967908, 1135056 and 1145611.
# If this is the case, vAry should be (967908 1135056 1145611).


# Download
echo "Downloading to the USB stick"
unset nBlk
i=1; sk=0; for nBlk in "${vAry[@]}" ; do
  f="debian-9.2.1-amd64-DVD-${i}.iso"
  url="$par$f"
  echo "$f   $nBlk   $sk"
  curl -LRA "$ua" "$url" | dd bs=4K seek=$sk of=/dev/sdb ; sync
  ((i++))
  ((sk+=nBlk))
  printf %b '--------------------\n\n\n'
done

printf %b '========================================\n\n\n'


# Checksum
echo "Reading from the USB stick to calculate the checksum"
i=1; sk=0; for nBlk in "${vAry[@]}" ; do
  f="debian-9.2.1-amd64-DVD-${i}.iso"
  echo "$f   $sk   $nBlk"
  dd bs=4K skip=$sk count=$nBlk if=/dev/sdb | tee >(openssl sha256 | perl -pe 's/^(\(stdin\)= )?/# sha256: /' >&2) >(openssl sha1 | perl -pe 's/^(\(stdin\)= )?/# sha1: /' >&2) | openssl sha512 | perl -pe 's/^(\(stdin\)= )?/# sha512: /'
  ((i++))
  ((sk+=nBlk))
  printf %b '--------------------\n\n\n'
done

スクリプトがDVDイメージ(amd64用Debian 9.2.1)をUSBスティックに書き込んだ後、DVD-1はバイト0から始まり、3964551168バイトを占め、DVD-2はバイト3964551168で始まり4649189376バイトを占め、DVD-3は次で始まり、4649189376バイトを占めます。バイト 0. 8613740544 バイトのうち 4692422656 バイトです。ここで、8613740544 = 3964551168+4649189376 です。 3つの画像が連続して保存されます。 USBスティックは起動可能でDVD-1として認識されますが、DVD-2とDVD-3はファイルシステムには表示されません。

隠し画像DVD-2とDVD-3をインストールするには?

私は2つの異なる解決策が欲しい。

(1)解決策の1つは、USBドライブが書き込み禁止になってディスクのパーティションテーブルを変更または作成できない状況のためです。

(2)別の解決策は、DVD-2とDVD-3がDVD-1パーティションとは別のパーティションとして認識されるようにUSBスティックのパーティションテーブルを調整することです。あるいは、2つの追加パーティションを作成する代わりに、DVD-2とDVD-3を収容するのに十分な大きさのDVD-1を含むパーティションを拡張し、ファイルシステムがDVD-2とDVD-3を通常のisoファイルとして認識するようにします。します。

3つの画像の連続性が(2)を妨げ、画像間にパーティションヘッダー用のスペースを残す方が良い場合は、画像間にスペースがあるようにスクリプトを変更できます。

*書き込み保護:ほとんどのUSBフラッシュドライブに書き込み保護ラベルはありません。ただし、すべてのSDカードには書き込み禁止ラベルがあります。 SDカードを搭載したUSB SDカードリーダー/ライターはUSBフラッシュドライブのように見えますが、実際にはUSBフラッシュドライブとして機能し、書き込み防止機能もあります。

答え1

質問が長すぎて最後まで読んだとは言えません。

ディスクを編集しないソリューションの場合:

基本的に言うことは、ディスクパーティションテーブルにリストされていないディスクパーティションです。

ディスクを挿入すると、Linuxはディスクにデバイスを割り当てます/dev(例:)/dev/sda。 Linuxはパーティションテーブルを読み取り、各パーティションにデバイスを追加します/dev/sda1/

実際には、自動的に設定されていないパーティションを手動で追加することが可能です。これはディスクのパーティションテーブルに追加されず、カーネルテーブルにのみ追加されます。

addpart方法を探すhttps://linux.die.net/man/8/addpart


ディスク編集ソリューションです。ディスクの正しい場所(正しいサイズのオフセットから始まる)にパーティションを追加するだけです。テーブルを編集するためのさまざまなプログラムがあります。たとえばfdisk。これ以外のものを使用する場合は、fdiskパーティションを作成するときにパーティションをフォーマットしないように注意してください。これはパーティションテーブルにのみ書き込まれ、データは編集されません。

https://linux.die.net/man/8/fdisk

答え2

ループデバイスを取り付けるときは、オフセットと寸法を指定できます。例えば

sudo mount -r /dev/sdb /mnt/dvd2 -o loop,offset=3964551168,sizelimit=4649189376

関連情報