When AWS imports physical disks through their Snowball service, they typically split large disk images into multiple BIN files. The output from file -k
reveals this is a FAT32 filesystem with an extended partition table:
image-NPX7P-0000.bin: x86 boot sector; partition 1: ID=0xb,
starthead 1, startsector 63, 3907024821 sectors, extended partition table
First concatenate the split files (this preserves partition tables and filesystem structures):
cat image-NPX7P-0000.bin image-NPX7P-0001.bin > combined_image.bin
For 2TB+ images, avoid full file operations. Instead use device-mapper tools:
sudo losetup -f --show -P combined_image.bin
# Output will show loop device like /dev/loop0
sudo kpartx -av /dev/loop0
# Maps partitions to /dev/mapper/loop0p1 etc.
The kernel output shows non-default FAT32 parameters that require special handling:
sudo mount -t vfat -o ro,iocharset=utf8,sectorsize=512,offset=$((63*512)) \
/dev/mapper/loop0p1 /mnt/aws_disk
If mounting fails with "wrong fs type" errors:
# Check filesystem signatures:
sudo blkid /dev/mapper/loop0p1
# Try alternative mount options for damaged FAT:
sudo mount -t vfat -o ro,errors=remount-ro,showexec /dev/mapper/loop0p1 /mnt/aws_disk
For very large images, consider direct block device access:
sudo dmsetup create aws_image --table "0 $(blockdev --getsz /dev/loop0) linear /dev/loop0 0"
sudo mount /dev/mapper/aws_image /mnt/aws_disk
When working with 2TB images, use direct I/O for better performance:
sudo mount -o ro,direct /dev/mapper/loop0p1 /mnt/aws_disk
Create a reusable mounting script:
#!/bin/bash
IMAGE=$1
MOUNTPOINT=$2
LOOPDEV=$(sudo losetup -f --show -P "$IMAGE")
PARTDEV="/dev/mapper/$(basename ${LOOPDEV})p1"
sudo kpartx -av "$LOOPDEV" > /dev/null 2>&1
sudo mount -t vfat -o ro,direct,offset=$((63*512)) "$PARTDEV" "$MOUNTPOINT"
echo "Mounted $IMAGE at $MOUNTPOINT via $LOOPDEV"
When importing large drives through AWS Import/Export service, you might encounter split .bin
disk images in your S3 bucket. These images often represent physical disks split into multiple parts for transfer efficiency. The challenge comes when trying to reassemble and mount them on Linux.
From the file -k
output, we can see:
image-NPX7P-0000.bin: x86 boot sector (partition 1)
image-NPX7P-0001.bin: data (extension of the first file)
This indicates we're dealing with a disk image containing:
- An MBR partition table
- FAT32 filesystem (as later revealed)
- Split across multiple binary files
1. Combining Split Images
First, concatenate the split parts using cat
:
cat image-NPX7P-0000.bin image-NPX7P-0001.bin > combined_image.bin
2. Setting Up Loop Device
Create a loop device for the combined image:
sudo losetup -f --show combined_image.bin
This will output the assigned loop device (e.g., /dev/loop0
)
3. Mapping Partitions
Use kpartx
to detect and map partitions:
sudo kpartx -av /dev/loop0
This creates device mapper entries for each partition (e.g., /dev/mapper/loop0p1
)
4. Mounting the Filesystem
For FAT32 filesystems (as identified in your case):
sudo mount -t vfat -o ro /dev/mapper/loop0p1 /mnt/recovery
If mounting fails, try these diagnostic steps:
# Check filesystem consistency
sudo fsck.vfat -v /dev/mapper/loop0p1
# Verify kernel FAT support
zgrep FAT /proc/config.gz
# Should show: CONFIG_VFAT_FS=y
For simpler cases, you can mount directly:
sudo mount -o loop,offset=$((63*512)) combined_image.bin /mnt/recovery
Where 63 is the starting sector from your file -k
output.
Here's a full script example:
#!/bin/bash
# Combine images
cat image-*.bin > combined.bin
# Setup loop device
LOOPDEV=$(sudo losetup -f --show combined.bin)
# Map partitions
sudo kpartx -av $LOOPDEV
# Wait for device nodes
sleep 2
# Mount first partition
sudo mount /dev/mapper/$(basename $LOOPDEV)p1 /mnt/recovery
For massive images:
- Ensure your system has enough RAM for buffering
- Consider using
pv
for progress monitoring during concatenation - Check filesystem alignment matches your EBS stripe configuration