default layouts added

This commit is contained in:
overcuriousity 2025-10-20 13:42:19 +02:00
parent 4cc66fe47a
commit c29225d40b
2 changed files with 369 additions and 92 deletions

183
README.md
View File

@ -5,6 +5,7 @@ A comprehensive toolkit for creating disk images with various filesystems for fo
## Features ## Features
- **Multiple Filesystem Support**: NTFS, FAT32, exFAT, ext2/3/4, XFS, swap - **Multiple Filesystem Support**: NTFS, FAT32, exFAT, ext2/3/4, XFS, swap
- **Preset Layouts**: Pre-configured layouts for Windows, Linux, and macOS systems
- **Multi-Partition Support**: Create up to 4 partitions in a single disk image - **Multi-Partition Support**: Create up to 4 partitions in a single disk image
- **Partition Schemes**: GPT (modern) and MBR (legacy) - **Partition Schemes**: GPT (modern) and MBR (legacy)
- **Initialization Methods**: Choose between /dev/zero (fast), /dev/urandom (realistic), or fallocate (sparse) - **Initialization Methods**: Choose between /dev/zero (fast), /dev/urandom (realistic), or fallocate (sparse)
@ -43,6 +44,34 @@ sudo apt-get install xfsprogs
sudo apt-get install sleuthkit sudo apt-get install sleuthkit
``` ```
## Preset Layouts
Choose from pre-configured layouts that simulate real operating systems:
**Windows Presets:**
- Windows 11/10 (GPT, EFI + NTFS + Recovery)
- Windows Vista/7/8 (MBR, System Reserved + NTFS)
- Windows 2000/XP (MBR, Single NTFS)
- Windows 98/ME (MBR, Single FAT32)
- Windows 95 (MBR, Single FAT16)
- Windows 3.1 (MBR, Single FAT16)
- MS-DOS (MBR, Single FAT12)
**Linux Presets:**
- Modern Linux (GPT, EFI + Root + Swap)
- Linux with /home (GPT, EFI + Root + Home)
- Classic Linux (MBR, Boot + Root + Swap)
- Minimal Linux (MBR, Single ext4)
**macOS Presets:**
- Modern macOS (GPT, EFI + APFS)
- Legacy macOS (GPT, Single HFS+)
**Custom Layout:**
- Full manual configuration with 1-4 partitions
All presets can be customized during setup or used as-is.
## Initialization Methods ## Initialization Methods
The script offers three methods for creating the disk image file: The script offers three methods for creating the disk image file:
@ -65,16 +94,6 @@ The script offers three methods for creating the disk image file:
- Good for quick testing - Good for quick testing
- May not be suitable for all forensic scenarios - May not be suitable for all forensic scenarios
## Multi-Partition Support
Create complex disk layouts with up to 4 partitions:
- Each partition can have a different filesystem
- Mix operating system types (Windows NTFS + Linux ext4)
- Include swap partitions for realistic Linux setups
- The last partition automatically uses remaining space
- Perfect for practicing partition table analysis
## Usage ## Usage
### Creating a Disk Image ### Creating a Disk Image
@ -89,21 +108,25 @@ The script will:
1. Check filesystem tool availability 1. Check filesystem tool availability
2. Interactively prompt you for: 2. Interactively prompt you for:
- **Filename**: Output file name (default: forensic_disk.dd) - **Filename**: Output file name (default: forensic_disk.dd)
- **Size**: Choose from presets (100MB, 500MB, 1GB, 5GB) or custom - **Size**: Choose from presets (100MB, 500MB, 1GB, 5GB, 10GB) or custom
- **Initialization Method**: /dev/zero, /dev/urandom, or fallocate - **Initialization Method**: /dev/zero, /dev/urandom, or fallocate
- **Partition Scheme**: GPT or MBR - **Layout**: Select a preset or custom configuration
- **Partition Count**: 1-4 partitions - **For Presets**: Option to use as-is or customize
- **Per-Partition Configuration**: - **For Custom**:
- Filesystem type (NTFS, FAT32, exFAT, ext2/3/4, XFS, swap) - Partition Scheme: GPT or MBR
- Size in MB (last partition uses remaining space) - Partition Count: 1-4 partitions
- Volume label (except for swap) - Per-Partition Configuration:
- Filesystem type (NTFS, FAT32, exFAT, ext2/3/4, XFS, swap, etc.)
- Size in MB (last partition uses remaining space)
- Volume label (except for swap)
- **Mount**: Option to mount filesystems immediately after creation - **Mount**: Option to mount filesystems immediately after creation
### Example Session ### Example Session (with Preset)
``` ```
========================================== ==========================================
Forensic Disk Image Creator Forensic Disk Image Creator
Enhanced Edition v2.1
========================================== ==========================================
Checking filesystem tool availability... Checking filesystem tool availability...
@ -115,71 +138,60 @@ Checking filesystem tool availability...
✓ XFS (mkfs.xfs available) ✓ XFS (mkfs.xfs available)
✓ swap (mkswap available) ✓ swap (mkswap available)
Enter output filename (default: forensic_disk.dd): ntfsdisk.dd Enter output filename (default: forensic_disk.dd): win11.dd
Disk Size Options: Disk Size Options:
1) 100 MB (small, quick testing) 1) 100 MB (small, quick testing)
2) 500 MB (medium) 2) 500 MB (medium)
3) 1 GB (standard) 3) 1 GB (standard)
4) 5 GB (large) 4) 5 GB (large)
5) Custom size 5) 10 GB (very large)
6) Custom size
Select disk size [1-5]: 2 Select disk size [1-6]: 3
Initialization Method: Initialization Method:
1) /dev/zero (Fast, zeros - forensically predictable) 1) /dev/zero (Fast, zeros - forensically predictable)
2) /dev/random (Slow, random data - more realistic) 2) /dev/urandom (Slow, random data - more realistic)
3) fallocate (Fastest, sparse file) 3) fallocate (Fastest, sparse file)
Select initialization method [1-3]: 1 Select initialization method [1-3]: 1
Partition Scheme:
1) GPT (GUID Partition Table) - Modern, Windows 10/11 default
2) MBR (Master Boot Record) - Legacy, compatible with older systems
Select partition scheme [1-2]: 1
How many partitions? (1-4): 2
========================================== ==========================================
Partition 1 Configuration Disk Layout
========================================== ==========================================
Filesystem Type: Layout Presets:
1) NTFS (Windows default)
2) FAT32 (Universal compatibility)
3) exFAT (Modern, large file support)
4) ext4 (Linux default)
5) ext3 (Older Linux)
6) ext2 (Legacy Linux, no journaling)
7) XFS (High-performance Linux)
8) swap (Linux swap space)
Select filesystem for partition 1 [1-8]: 1 Windows Presets:
1) Windows 11/10 (GPT, EFI + NTFS + Recovery)
2) Windows Vista/7/8 (MBR, System Reserved + NTFS)
3) Windows 2000/XP (MBR, Single NTFS)
4) Windows 98/ME (MBR, Single FAT32)
5) Windows 95 (MBR, Single FAT16)
6) Windows 3.1 (MBR, Single FAT16)
7) MS-DOS (MBR, Single FAT12)
Size for partition 1 in MB: 400 Linux Presets:
8) Modern Linux (GPT, EFI + Root + Swap)
9) Linux with /home (GPT, EFI + Root + Home)
10) Classic Linux (MBR, Boot + Root + Swap)
11) Minimal Linux (MBR, Single ext4)
Volume label for partition 1 (default: PART1): EVIDENCE macOS Presets:
12) Modern macOS (GPT, EFI + APFS)
13) Legacy macOS (GPT, Single HFS+)
========================================== Custom:
Partition 2 Configuration 14) Custom layout (manual configuration)
==========================================
Filesystem Type: Select layout [1-14]: 1
1) NTFS (Windows default)
2) FAT32 (Universal compatibility)
3) exFAT (Modern, large file support)
4) ext4 (Linux default)
5) ext3 (Older Linux)
6) ext2 (Legacy Linux, no journaling)
7) XFS (High-performance Linux)
8) swap (Linux swap space)
Select filesystem for partition 2 [1-8]: 4 [INFO] Preset: Windows 11/10 (GPT)
[NOTE] EFI System Partition (260MB) + Main Windows (auto) + Recovery (500MB)
[INFO] Partition 2 will use remaining space Customize this preset? (y/n, default: n): n
[INFO] Using preset configuration as-is
Volume label for partition 2 (default: PART2): DATA
``` ```
### Cleaning Up ### Cleaning Up
@ -203,45 +215,45 @@ sudo ./cleanup.sh
#### View raw disk structure #### View raw disk structure
```bash ```bash
# Using hexdump # Using hexdump
hexdump -C ntfsdisk.dd | less hexdump -C win11.dd | less
# Using xxd # Using xxd
xxd ntfsdisk.dd | less xxd win11.dd | less
# View first 512 bytes (boot sector) # View first 512 bytes (boot sector)
xxd -l 512 ntfsdisk.dd xxd -l 512 win11.dd
# View specific offset (e.g., partition table at 0x1BE for MBR) # View specific offset (e.g., partition table at 0x1BE for MBR)
xxd -s 0x1BE -l 64 ntfsdisk.dd xxd -s 0x1BE -l 64 win11.dd
``` ```
#### GUI Hex Editors #### GUI Hex Editors
```bash ```bash
# Install Bless (GTK hex editor) # Install Bless (GTK hex editor)
sudo apt-get install bless sudo apt-get install bless
bless ntfsdisk.dd bless win11.dd
# Or install GHex # Or install GHex
sudo apt-get install ghex sudo apt-get install ghex
ghex ntfsdisk.dd ghex win11.dd
# Or install wxHexEditor (advanced) # Or install wxHexEditor (advanced)
sudo apt-get install wxhexeditor sudo apt-get install wxhexeditor
wxhexeditor ntfsdisk.dd wxhexeditor win11.dd
``` ```
### Partition Analysis ### Partition Analysis
```bash ```bash
# View partition table # View partition table
sudo parted ntfsdisk.dd print sudo parted win11.dd print
# Or using fdisk # Or using fdisk
sudo fdisk -l ntfsdisk.dd sudo fdisk -l win11.dd
# For GPT, use gdisk # For GPT, use gdisk
sudo apt-get install gdisk sudo apt-get install gdisk
sudo gdisk -l ntfsdisk.dd sudo gdisk -l win11.dd
``` ```
### Using The Sleuth Kit (TSK) ### Using The Sleuth Kit (TSK)
@ -251,22 +263,22 @@ sudo gdisk -l ntfsdisk.dd
sudo apt-get install sleuthkit sudo apt-get install sleuthkit
# Display partition layout # Display partition layout
mmls ntfsdisk.dd mmls win11.dd
# Show filesystem details (offset from mmls output) # Show filesystem details (offset from mmls output)
fsstat -o 2048 ntfsdisk.dd fsstat -o 2048 win11.dd
# List files in filesystem # List files in filesystem
fls -o 2048 -r ntfsdisk.dd fls -o 2048 -r win11.dd
# Display file content by inode # Display file content by inode
icat -o 2048 ntfsdisk.dd [inode_number] icat -o 2048 win11.dd [inode_number]
# Show deleted files # Show deleted files
fls -o 2048 -rd ntfsdisk.dd fls -o 2048 -rd win11.dd
# Timeline analysis # Timeline analysis
fls -o 2048 -m / -r ntfsdisk.dd > timeline.bodyfile fls -o 2048 -m / -r win11.dd > timeline.bodyfile
mactime -b timeline.bodyfile mactime -b timeline.bodyfile
``` ```
@ -276,13 +288,13 @@ If you need more control over the loop device:
```bash ```bash
# Attach image to loop device # Attach image to loop device
sudo losetup -f ntfsdisk.dd sudo losetup -f win11.dd
# List all loop devices # List all loop devices
sudo losetup -l sudo losetup -l
# Find out which loop device is attached # Find out which loop device is attached
sudo losetup -j ntfsdisk.dd sudo losetup -j win11.dd
# Mount the partition # Mount the partition
sudo mkdir -p /mnt/forensic sudo mkdir -p /mnt/forensic
@ -309,7 +321,7 @@ sudo ntfscluster -f /dev/loop0p1
# Recover deleted files # Recover deleted files
sudo apt-get install testdisk sudo apt-get install testdisk
sudo testdisk ntfsdisk.dd sudo testdisk win11.dd
``` ```
#### FAT32 Analysis #### FAT32 Analysis
@ -319,7 +331,7 @@ sudo testdisk ntfsdisk.dd
sudo fsck.vfat -n /dev/loop0p1 sudo fsck.vfat -n /dev/loop0p1
# Or using sleuthkit # Or using sleuthkit
fsstat -o 2048 ntfsdisk.dd fsstat -o 2048 win11.dd
``` ```
#### ext4 Analysis #### ext4 Analysis
@ -370,12 +382,12 @@ sudo debugfs -R 'stat <inode>' /dev/loop0p1
### Beginner Level ### Beginner Level
1. **Identify Partition Scheme** 1. **Identify Partition Scheme**
- Create disks with GPT and MBR - Create disks with different Windows versions (MBR vs GPT)
- Compare the first 512 bytes - Compare the first 512 bytes
- Identify the signature differences - Identify the signature differences
2. **Find the Filesystem Type** 2. **Find the Filesystem Type**
- Create disks with different filesystems - Create disks with different filesystems using presets
- Examine boot sector signatures - Examine boot sector signatures
- Identify OEM strings - Identify OEM strings
@ -417,6 +429,11 @@ sudo debugfs -R 'stat <inode>' /dev/loop0p1
- Examine wiping patterns - Examine wiping patterns
- Analyze file system corruption - Analyze file system corruption
10. **Cross-OS Analysis**
- Create Windows and Linux dual-boot layout
- Analyze different partition schemes
- Practice identifying filesystem boundaries
## Troubleshooting ## Troubleshooting
### Loop device not found ### Loop device not found
@ -431,7 +448,7 @@ ls -la /dev/loop*
### Permission denied ### Permission denied
```bash ```bash
# Always use sudo for these operations # Always use sudo for these operations
sudo ./create_forensic_disk.sh sudo ./pseudodisk.sh
``` ```
### Partition not showing up ### Partition not showing up
@ -441,7 +458,7 @@ sudo partprobe /dev/loopX
# Or detach and re-attach # Or detach and re-attach
sudo losetup -d /dev/loopX sudo losetup -d /dev/loopX
sudo losetup -f ntfsdisk.dd sudo losetup -f win11.dd
``` ```
### Cannot unmount - device busy ### Cannot unmount - device busy

View File

@ -4,7 +4,7 @@
# Creates disk images with various filesystems for forensic analysis practice # Creates disk images with various filesystems for forensic analysis practice
# Now with improved UX, sanity checks, and extended filesystem support # Now with improved UX, sanity checks, and extended filesystem support
set -e # Exit on error #set -e # Exit on error
# Color codes for output # Color codes for output
RED='\033[0;31m' RED='\033[0;31m'
@ -285,7 +285,7 @@ show_banner() {
echo "" echo ""
echo "==========================================" echo "=========================================="
echo " Forensic Disk Image Creator" echo " Forensic Disk Image Creator"
echo " Enhanced Edition v2.0" echo " Enhanced Edition v2.1"
echo "==========================================" echo "=========================================="
echo "" echo ""
} }
@ -396,6 +396,239 @@ get_init_method() {
print_info "Selected initialization method: $INIT_METHOD" print_info "Selected initialization method: $INIT_METHOD"
} }
# Get preset or custom layout
get_preset_or_custom() {
USE_PRESET=false
echo ""
echo "=========================================="
echo " Disk Layout"
echo "=========================================="
echo ""
echo "Layout Presets:"
echo ""
echo " Windows Presets:"
echo " 1) Windows 11/10 (GPT, EFI + NTFS + Recovery)"
echo " 2) Windows Vista/7/8 (MBR, System Reserved + NTFS)"
echo " 3) Windows 2000/XP (MBR, Single NTFS)"
echo " 4) Windows 98/ME (MBR, Single FAT32)"
echo " 5) Windows 95 (MBR, Single FAT16)"
echo " 6) Windows 3.1 (MBR, Single FAT16)"
echo " 7) MS-DOS (MBR, Single FAT12)"
echo ""
echo " Linux Presets:"
echo " 8) Modern Linux (GPT, EFI + Root + Swap)"
echo " 9) Linux with /home (GPT, EFI + Root + Home)"
echo " 10) Classic Linux (MBR, Boot + Root + Swap)"
echo " 11) Minimal Linux (MBR, Single ext4)"
echo ""
echo " macOS Presets:"
echo " 12) Modern macOS (GPT, EFI + APFS)"
echo " 13) Legacy macOS (GPT, Single HFS+)"
echo ""
echo " Custom:"
echo " 14) Custom layout (manual configuration)"
echo ""
read -p "Select layout [1-14]: " PRESET_CHOICE
case $PRESET_CHOICE in
1) # Windows 11/10
USE_PRESET=true
PARTITION_SCHEME="gpt"
PARTITION_COUNT=3
print_info "Preset: Windows 11/10 (GPT)"
print_note "EFI System Partition (260MB) + Main Windows (auto) + Recovery (500MB)"
;;
2) # Windows Vista/7/8
USE_PRESET=true
PARTITION_SCHEME="msdos"
PARTITION_COUNT=2
print_info "Preset: Windows Vista/7/8 (MBR)"
print_note "System Reserved (100MB) + Main Windows (auto)"
;;
3) # Windows 2000/XP
USE_PRESET=true
PARTITION_SCHEME="msdos"
PARTITION_COUNT=1
print_info "Preset: Windows 2000/XP (MBR)"
print_note "Single NTFS partition"
;;
4) # Windows 98/ME
USE_PRESET=true
PARTITION_SCHEME="msdos"
PARTITION_COUNT=1
print_info "Preset: Windows 98/ME (MBR)"
print_note "Single FAT32 partition"
;;
5) # Windows 95
USE_PRESET=true
PARTITION_SCHEME="msdos"
PARTITION_COUNT=1
print_info "Preset: Windows 95 (MBR)"
print_note "Single FAT16 partition"
;;
6) # Windows 3.1
USE_PRESET=true
PARTITION_SCHEME="msdos"
PARTITION_COUNT=1
print_info "Preset: Windows 3.1 (MBR)"
print_note "Single FAT16 partition"
;;
7) # MS-DOS
USE_PRESET=true
PARTITION_SCHEME="msdos"
PARTITION_COUNT=1
print_info "Preset: MS-DOS (MBR)"
print_note "Single FAT12 partition (max 16MB)"
if [ "$DISK_SIZE_MB" -gt 16 ]; then
print_warning "MS-DOS typically uses FAT12 which is limited to 16MB"
print_info "Consider reducing disk size or the partition will use FAT16"
fi
;;
8) # Modern Linux
USE_PRESET=true
PARTITION_SCHEME="gpt"
PARTITION_COUNT=3
print_info "Preset: Modern Linux (GPT)"
print_note "EFI (260MB) + Root ext4 (auto) + Swap (2GB)"
;;
9) # Linux with /home
USE_PRESET=true
PARTITION_SCHEME="gpt"
PARTITION_COUNT=3
print_info "Preset: Linux with separate /home (GPT)"
print_note "EFI (260MB) + Root ext4 (auto) + Home ext4 (auto)"
;;
10) # Classic Linux
USE_PRESET=true
PARTITION_SCHEME="msdos"
PARTITION_COUNT=3
print_info "Preset: Classic Linux (MBR)"
print_note "Boot ext4 (500MB) + Root ext4 (auto) + Swap (2GB)"
;;
11) # Minimal Linux
USE_PRESET=true
PARTITION_SCHEME="msdos"
PARTITION_COUNT=1
print_info "Preset: Minimal Linux (MBR)"
print_note "Single ext4 partition"
;;
12) # Modern macOS
USE_PRESET=true
PARTITION_SCHEME="gpt"
PARTITION_COUNT=2
print_info "Preset: Modern macOS (GPT)"
print_note "EFI (200MB) + APFS (auto)"
print_warning "APFS support on Linux is very limited"
;;
13) # Legacy macOS
USE_PRESET=true
PARTITION_SCHEME="gpt"
PARTITION_COUNT=1
print_info "Preset: Legacy macOS (GPT)"
print_note "Single HFS+ partition"
print_warning "HFS+ support on Linux is limited"
;;
14) # Custom
USE_PRESET=false
print_info "Custom layout selected"
;;
*)
print_error "Invalid choice"
get_preset_or_custom
return
;;
esac
if [ "$USE_PRESET" = true ]; then
echo ""
read -p "Customize this preset? (y/n, default: n): " CUSTOMIZE
CUSTOMIZE=${CUSTOMIZE:-n}
if [ "$CUSTOMIZE" = "y" ]; then
ALLOW_PRESET_CUSTOMIZATION=true
print_info "You can modify the preset configuration in the next steps"
else
ALLOW_PRESET_CUSTOMIZATION=false
print_info "Using preset configuration as-is"
fi
fi
}
# Apply preset configuration
apply_preset() {
PARTITION_CONFIGS=()
case $PRESET_CHOICE in
1) # Windows 11/10
PARTITION_CONFIGS+=("vfat|260|EFI")
PARTITION_CONFIGS+=("ntfs|remaining|Windows")
PARTITION_CONFIGS+=("ntfs|500|Recovery")
;;
2) # Windows Vista/7/8
PARTITION_CONFIGS+=("ntfs|100|System")
PARTITION_CONFIGS+=("ntfs|remaining|Windows")
;;
3) # Windows 2000/XP
PARTITION_CONFIGS+=("ntfs|remaining|Windows")
;;
4) # Windows 98/ME
PARTITION_CONFIGS+=("vfat|remaining|WIN98")
;;
5) # Windows 95
if [ "$DISK_SIZE_MB" -le 2048 ]; then
PARTITION_CONFIGS+=("fat16|remaining|WIN95")
else
PARTITION_CONFIGS+=("vfat|remaining|WIN95")
print_warning "Disk >2GB, using FAT32 instead of FAT16"
fi
;;
6) # Windows 3.1
PARTITION_CONFIGS+=("fat16|remaining|WIN31")
;;
7) # MS-DOS
if [ "$DISK_SIZE_MB" -le 16 ]; then
PARTITION_CONFIGS+=("fat12|remaining|MSDOS")
else
PARTITION_CONFIGS+=("fat16|remaining|MSDOS")
print_warning "Disk >16MB, using FAT16 instead of FAT12"
fi
;;
8) # Modern Linux
PARTITION_CONFIGS+=("vfat|260|EFI")
PARTITION_CONFIGS+=("ext4|remaining|rootfs")
PARTITION_CONFIGS+=("swap|2048|")
;;
9) # Linux with /home
local root_size=$((DISK_SIZE_MB / 4))
if [ "$root_size" -lt 5120 ]; then
root_size=5120 # Minimum 5GB for root
fi
if [ "$root_size" -gt $((DISK_SIZE_MB - 1024)) ]; then
root_size=$((DISK_SIZE_MB / 2)) # If not enough space, use half
fi
PARTITION_CONFIGS+=("vfat|260|EFI")
PARTITION_CONFIGS+=("ext4|${root_size}|rootfs")
PARTITION_CONFIGS+=("ext4|remaining|home")
;;
10) # Classic Linux
PARTITION_CONFIGS+=("ext4|500|boot")
PARTITION_CONFIGS+=("ext4|remaining|rootfs")
PARTITION_CONFIGS+=("swap|2048|")
;;
11) # Minimal Linux
PARTITION_CONFIGS+=("ext4|remaining|rootfs")
;;
12) # Modern macOS
PARTITION_CONFIGS+=("vfat|200|EFI")
PARTITION_CONFIGS+=("apfs|remaining|MacintoshHD")
;;
13) # Legacy macOS
PARTITION_CONFIGS+=("hfsplus|remaining|MacintoshHD")
;;
esac
}
# Get partition scheme # Get partition scheme
get_partition_scheme() { get_partition_scheme() {
echo "" echo ""
@ -405,9 +638,9 @@ get_partition_scheme() {
echo "" echo ""
print_tip "GPT is recommended for modern systems and disks >2TB" print_tip "GPT is recommended for modern systems and disks >2TB"
echo "" echo ""
read -p "Select partition scheme [1-2]: " PARTITION_CHOICE read -p "Select partition scheme [1-2]: " PARTITION_CHOICE_SCHEME
case $PARTITION_CHOICE in case $PARTITION_CHOICE_SCHEME in
1) PARTITION_SCHEME="gpt" ;; 1) PARTITION_SCHEME="gpt" ;;
2) 2)
PARTITION_SCHEME="msdos" PARTITION_SCHEME="msdos"
@ -1030,9 +1263,36 @@ main() {
get_filename get_filename
get_disk_size get_disk_size
get_init_method get_init_method
get_partition_scheme get_preset_or_custom
get_partition_count
get_partition_configs if [ "$USE_PRESET" = true ]; then
apply_preset
if [ "$ALLOW_PRESET_CUSTOMIZATION" = true ]; then
# Show current config and allow modifications
echo ""
echo "Current preset configuration:"
for i in $(seq 1 ${#PARTITION_CONFIGS[@]}); do
config="${PARTITION_CONFIGS[$((i-1))]}"
IFS='|' read -r fs size label <<< "$config"
if [ "$fs" = "swap" ]; then
echo " [$i] $fs (${size}MB)"
else
echo " [$i] $fs (${size}MB) - '$label'"
fi
done
echo ""
read -p "Modify partition configurations? (y/n): " modify
if [ "$modify" = "y" ]; then
get_partition_configs
fi
fi
else
# Custom layout
get_partition_scheme
get_partition_count
get_partition_configs
fi
# Show final summary and confirm # Show final summary and confirm
echo "" echo ""
@ -1043,9 +1303,9 @@ main() {
echo "Size: ${DISK_SIZE_MB} MB ($(echo "scale=2; $DISK_SIZE_MB/1024" | bc) GB)" echo "Size: ${DISK_SIZE_MB} MB ($(echo "scale=2; $DISK_SIZE_MB/1024" | bc) GB)"
echo "Init Method: $INIT_METHOD" echo "Init Method: $INIT_METHOD"
echo "Partition Scheme: $PARTITION_SCHEME" echo "Partition Scheme: $PARTITION_SCHEME"
echo "Partitions: $PARTITION_COUNT" echo "Partitions: ${#PARTITION_CONFIGS[@]}"
for i in $(seq 1 $PARTITION_COUNT); do for i in $(seq 1 ${#PARTITION_CONFIGS[@]}); do
config="${PARTITION_CONFIGS[$((i-1))]}" config="${PARTITION_CONFIGS[$((i-1))]}"
IFS='|' read -r fs size label <<< "$config" IFS='|' read -r fs size label <<< "$config"
if [ "$fs" = "swap" ]; then if [ "$fs" = "swap" ]; then