default layouts added
This commit is contained in:
183
README.md
183
README.md
@@ -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
|
||||||
|
|||||||
278
pseudodisk.sh
278
pseudodisk.sh
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user