Hard Disk Backup HOWTO
From Xbox-Linux
by Michael Steil (Original Version: 8 May 2002)
With the Xbox hard disk conntected to your Linux computer, or with Linux running on your Xbox, you can easily make backups of the hard disk. Note that you have to replace "hdc" with "hda", if you use these commands on the Xbox - and of course, the directory you are in should be a network volume.
You can just make a complete image by running the following line as root:
dd if=/dev/hdc of=xbox-image.raw bs=1M
Note that you need kernel 2.4 or above and a file system that supports files bigger than 2 GB (e.g. notext2 or FAT), because the image size will be about 10 GB. It is possible to split the image into 1 GB files:
dd if=/dev/hdc bs=1M | split -b 1024m
If you want to experiment with the image contents, it might make sense to read the partitions into single files, as described in the table below. (It might be a good idea to compress the files and backup them to a CD-R. A bzip2-compressed backup of an Xbox hard disk that has never seen a game or audio CD will only be about 250 MB.)
No split, filesystem without 2 GB limit | Split, filesystem with 2 GB limit | |
Backup |
dd if=/dev/hdc of=00head.raw count=1 bs=512k dd if=/dev/hdc of=0.raw skip=1 count=1500 bs=512k dd if=/dev/hdc of=1.raw skip=1501 count=1500 bs=512k dd if=/dev/hdc of=2.raw skip=3001 count=1500 bs=512k dd if=/dev/hdc of=3.raw skip=4501 count=1000 bs=512k dd if=/dev/hdc of=4.raw skip=5501 count=9790 bs=512k dd if=/dev/hdc of=5.raw skip=15291 bs=512k |
dd if=/dev/hdc of=00head.raw count=1 bs=512k dd if=/dev/hdc of=0.raw skip=1 count=1500 bs=512k dd if=/dev/hdc of=1.raw skip=1501 count=1500 bs=512k dd if=/dev/hdc of=2.raw skip=3001 count=1500 bs=512k dd if=/dev/hdc of=3.raw skip=4501 count=1000 bs=512k dd if=/dev/hdc skip=5501 count=9790 bs=512k | split -b 1024m - 4 dd if=/dev/hdc skip=15291 bs=512k | split -b 1024m - 5 |
Compress |
bzip2 -9 *.raw |
bzip2 -9 *.raw 4* 5* |
Restore all |
cat *.raw > /dev/hdc |
cat *.raw 4* 5* > /dev/hdc |
Restore all (compressed) |
bzip2 -cd *.bz2 > /dev/hdc |
bzip2 -cd *.bz2 > /dev/hdc |
Restore single partition/s |
dd if=00head.raw of=/dev/hdc bs=512k dd if=0.raw of=/dev/hdc seek=1 bs=512k dd if=1.raw of=/dev/hdc seek=1501 bs=512k dd if=2.raw of=/dev/hdc seek=3001 bs=512k dd if=3.raw of=/dev/hdc seek=4501 bs=512k dd if=4.raw of=/dev/hdc seek=5501 bs=512k dd if=5.raw of=/dev/hdc seek=15291 bs=512k |
dd if=00head.raw of=/dev/hdc bs=512k dd if=0.raw of=/dev/hdc seek=1 bs=512k dd if=1.raw of=/dev/hdc seek=1501 bs=512k dd if=2.raw of=/dev/hdc seek=3001 bs=512k dd if=3.raw of=/dev/hdc seek=4501 bs=512k cat 4* | dd of=/dev/hdc seek=5501 bs=512k cat 5* | dd of=/dev/hdc seek=15291 bs=512k |
Restore single partition/s (compressed) |
bzip2 -cd 00head.raw.bz2 | dd of=/dev/hdc bs=512k bzip2 -cd 0.raw.bz2 | dd of=/dev/hdc seek=1 bs=512k bzip2 -cd 1.raw.bz2 | dd of=/dev/hdc seek=1501 bs=512k bzip2 -cd 2.raw.bz2 | dd of=/dev/hdc seek=3001 bs=512k bzip2 -cd 3.raw.bz2 | dd of=/dev/hdc seek=4501 bs=512k bzip2 -cd 4.raw.bz2 | dd of=/dev/hdc seek=5501 bs=512k bzip2 -cd 5.raw.bz2 | dd of=/dev/hdc seek=15291 bs=512k |
bzip2 -cd 00head.raw.bz2 | dd of=/dev/hdc bs=512k bzip2 -cd 0.raw.bz2 | dd of=/dev/hdc seek=1 bs=512k bzip2 -cd 1.raw.bz2 | dd of=/dev/hdc seek=1501 bs=512k bzip2 -cd 2.raw.bz2 | dd of=/dev/hdc seek=3001 bs=512k bzip2 -cd 3.raw.bz2 | dd of=/dev/hdc seek=4501 bs=512k bzip2 -cd 4* | dd of=/dev/hdc seek=5501 bs=512k bzip2 -cd 5* | dd of=/dev/hdc seek=15291 bs=512k |
This will result in the following files:
File Name | Size | Description |
00head.raw | 0.5 MB | Disk Config Area |
0.raw | 750 MB | Game Cache A (FATX), X: |
1.raw | 750 MB | Game Cache B (FATX), Y: |
2.raw | 750 MB | Game Cache C (FATX), Z: |
3.raw | 500 MB | System Files (FATX), C: |
4.raw
| 4895 MB | Music, Saved Games (FATX), E: |
5.raw
| 1896 MB | unused/empty, F: |
If you want to extract data from the FATX partitions stored in single
files using the program
xboxdumper
, you will have to modify the array partitionAddresses[] at the
beginning of the file main.c as follows:
u_int64_t partitionAddresses[] = { 0, 0, 0, 0, 0 };
Now always pass the corresponding image file to
xboxdumper
as a parameter, for instance:
./xboxdumper list 3 3.raw