--- title: "How to resize a Gokrazy SD card" date: 2023-10-02 tags: - gokrazy hero: ai: Anything V3 file: seattle-commute prompt: "1girl, green hair, green eyes, tshirt, jeans, sneakers, seattle, space needle, controlnet overlay: soyjacks pointing" --- I have a Raspberry Pi embedded into my main shellbox. This allows me to have a built-in device that lets me do things like act as a serial terminal of last resort for my tower. It's powered by a [Molex to USB-A cable](https://www.amazon.ca/CRJ-4-Pin-Female-Sleeved-Adapter/dp/B07FK7TJG1/) (which is about the most cursed cable I have ever used) and probably benefits from the absolutely overkill tier Noctua cooler that I put on that board. Recently I decided to put [GoToSocial](https://gotosocial.org/) on that Raspberry Pi to see if it would work in [Gokrazy](https://gokrazy.org/). Turns out it does! I also installed [minio](https://min.io/) on there to act as an S3 compatible storage solution and it's basically a little social network in a box. This will be discussed in greater detail in a future post. However, there was only one problem. I set up my Gokrazy node with a 64 GB SD card because that's what I had laying around. Given that social media stuff can take a lot of data, I wanted to upgrade it to a 512 GB SD card so that I didn't have to care about it for a while. I also wanted to make a backup of the [XeDN](/blog/xedn) bucket onto the Raspi as well as another one I'd mail to a friend. Here's how I copied the data over to the new SD card. First, I plugged both SD cards into my shellbox over the front panel USB. My SD card reader had support for both a Micro SD card and a normal SD card, so I plugged the 64 GB card into a SD-uSD adaptor and had both of them connected. If you only have one SD card slot to play with, you can also copy the data to a file as an intermediate step. Once they were plugged in (the old one was chosen to be /dev/sde and the new one was chosen to be /dev/sdd), I copied the data over with [dd(1)](https://www.man7.org/linux/man-pages/man1/dd.1.html): ``` sudo dd if=/dev/sde of=/dev/sdd bs=4M status=progress ``` In `dd`, the `if=` is the _input_ file and the `of=` is the _output file_. These can be any files you want, even normal files on the disk. If you SD card reader doesn't have two slots, you will have to set the output file to somewhere on the disk, and then use that file as the input file for the next run. It'd be something like: ``` sudo dd if=/dev/sde of=./sdcard.img bs=4M status=progress (swap cards) sudo dd if=./sdcard.img of=/dev/sde bs=4M status=progress ``` Keep in mind that when you're running `dd` commands like this, you are basically working without guardrails or handbrakes. You need to be _absolutely certain_ that you are dealing with the correct devices. You can check these by using the `lsblk` or `dmesg` commands. `lsblk` lets you see the storage "block" devices that are connected to a Linux machine. For example, here's what you could see on a Linux machine's NVME drive: ``` $ lsblk /dev/nvme0n1 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS nvme0n1 259:0 0 931.5G 0 disk ├─nvme0n1p1 259:1 0 923G 0 part ├─nvme0n1p2 259:2 0 8G 0 part [SWAP] └─nvme0n1p3 259:3 0 511M 0 part /boot ``` `dmesg` lets you see the kernel log buffer. You may want to run it with `-w` so that you can continuously watch the changes. When figuring out which SD card was which, I used `dmesg -w` to look for new block storage devices being connected, and then `lsblk` to figure out which one was the old/new one. Gokrazy sets up 4 partitions (boot, root A, root B, and persistent storage), so you can also use that to help you figure out which is which. The data copy took at least half an hour, which I left running while playing some [Pokemon Infinite Fusion](https://github.com/infinitefusion/infinitefusion-e18). Once it was done, I ran the `sync` command for good measure and disconnected my SD card reader. Then I removed the old SD card and plugged the reader back in. After running the `lsblk` command, I knew I was good. Now I needed to resize the partition at /dev/sdd4. I installed [growpart](https://access.redhat.com/solutions/5540131) from the cloud-utils package and ran it on the SD card: ``` sudo growpart /dev/sdd 4 ``` This grew the GPT tables for the SD card to fit the new size. Next I needed to run a filesystem check on the storage partition and resize it with `resize2fs`: ``` sudo e2fsck -f /dev/sdd4 sudo resize2fs /dev/sdd4 ``` After that finished, I test-mounted the storage drive on `/mnt/aile` and unmounted it. Everything worked great. I took out the SD card from my shellbox, popped the new card into the raspi, booted it up and bam: 512 GB of storage: Stay tuned, I have plans.