diff --git a/_posts/2021-03-27-sd-card-backer-upper.md b/_posts/2021-03-27-sd-card-backer-upper.md new file mode 100644 index 0000000..7a79168 --- /dev/null +++ b/_posts/2021-03-27-sd-card-backer-upper.md @@ -0,0 +1,96 @@ +--- +layout: post +title: "Automatic SD Card Backer Upper" +--- +# Automatic SD Card Backer Upper + +I play on my DSi a lot, and i have all of my cartridges dumped to an SD card +so I don't need to carry them with me to switch games. All my saves are stored +on the SD card too, and sometimes I worry about the card getting corrupted or +lost. So I used my Raspberry Pi to easily back it up. All I have to do is plug +the card into the Pi, and it copies the files into a new folder and toggles a +light when its done. + +## What I used: + * SD Card adapter + * USB mouse that I didn't care about + (any usb device that can light up will work) + * Raspberry Pi 3 + (any raspberry pi with a USB connection and 3.5mm jack will work) + +I did this on Ubuntu, but the instructions should work for Raspbian as well. + +## Files + +I made a few files for this to work: a udev rule file, a systemd unit, and a +shell script. + +### Udev Rule +``` +# /etc/udev/rules.d/999-automount.rules +ACTION=="add", SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="000000000828", RUN+="/usr/bin/systemctl start DSi.service" +``` +You'll have to modify the `000000000828` to match the serial of your device, +which you can get by plugging in the device, finding its /dev file, and running +`udevadm info /dev/sdx | grep ID_SERIAL_SHORT`. + +### Systemd Service +``` +# /etc/systemd/system/DSi.service +[Unit] +Description=back up dsi sd +[Service] +ExecStart=/home/ubuntu/autocopy.sh +[Install] +``` +There's nothing in the `[Install]` section because this isn't made to be enabled +with `systemctl enable`, just executed with `systemctl start`, which the udev +rule will do automatically. You'll want to modify the `ExecStart` line to point +to your shell script. + +### Shell Script +``` +#!/bin/sh +# /home/ubuntu/autocopy.sh +TIME=$(TZ=EST date +%F_%T) # used for folder name +LABEL=DSi # the label of the SD cards filesystem +MNT=/home/ubuntu/dsimnt # mount point of the sd card +BACKUPDIR=/home/ubuntu/DSi # main directory all backups go to +USBDEV=/sys/bus/usb/devices/1-1.5 # the sysfs entry for the usb device to use as a light + +# turn on the "led indicator" thats really a usb mouse torn apart +echo 1 > ${USBDEV}/authorized +mount "/dev/disk/by-label/${LABEL}" ${MNT} +mkdir "${BACKUPDIR}/${TIME}" +cp -r ${MNT}/* ${BACKUPDIR}/${TIME}/ +umount ${MNT} +echo "done! you can remove the card." +# turn that mouse back off +echo 0 > ${USBDEV}/authorized +``` +You'll want to change the `LABEL` variable to whatever the label of your SD card +filesystem is. + +You will probably want to change the `TZ=EST` inside the `TIME` variable unless +you happen to live on the eastern coast of the United States. + +The mount point in the `MNT` variable is where the SD card should mount, which +can be anywhere. + +The `BACKUPDIR` variable should be on a separate drive unless you have a +decently sized microSD inside your Pi that you don't mind filling up. + +The `USBDEV` variable is the path to your USB "light" inside +`/sys/bus/usb/devices`. You can run `lsusb` to get the ID of the usb device, +then `cat` the `idProduct` and `idVendor` files inside each usb device folder +until you find the one that matches your usb device. + +## Final Product + +What you'll have is something you can plug your SD card into and have a backup +taken automagically. The light turns on when it's copying files, and turns off +and unmounts the card when its done. +You can see [a video of it working](/assets/sdcardpithing.mp4) here. Excuse the +mess :) To access these backups, just go to the backup directory. + +![image](/assets/sdcardfolder.png) diff --git a/assets/sdcardfolder.png b/assets/sdcardfolder.png new file mode 100644 index 0000000..309f441 Binary files /dev/null and b/assets/sdcardfolder.png differ diff --git a/assets/sdcardpithing.mp4 b/assets/sdcardpithing.mp4 new file mode 100644 index 0000000..8e2f715 Binary files /dev/null and b/assets/sdcardpithing.mp4 differ