Reinstall your Raspberry over the Network

Sometimes you want to reinstall your Raspberry Pi without switching the SD-card or via remote since it is located on another physical location. Here is a solution to reinstall the operating system remotely.

Installation

1. First you must activate the magic SysRq option:
This will enable the reset of the Raspberry without regular commands.

2a. Transfer the image and write it to SD:
  • Login via SSH to the system on which the image is located and read it via dd. The stdout is tunneled through SSH to the local system.
  • Using pv you can see how much data is transferred. (You may need to install it with apt-get, but you can also omit this.)
  • funzip extracts the first file and sends it to stdout.
  • dd writes it to the SD-card.
 2b. You can also pull the image direct from the Internet:
3. Reset the Raspberry:

Important

There are many ways how to transfer an image over the network. The methods described here pull the image from a remote location. After the transfer process has been completed, you are still logged in. With other ways, if you are logged out, you are lost because you cannot log in any more…

Be sure that you have DHCP enabled on the network.

Good luck. ;)

Links

Featured image “raspberry pi” by Clive Darra is licensed under CC BY-SA 2.0.

34 thoughts on “Reinstall your Raspberry over the Network

  1. I know this is an older entry..

    But seems the best so far, I am about to start this..

    You are installing this over a network because the Pi is in another, remote location..

    How do you access it after resetting it?

    When I write the image locally I have to “touch ssh” in the boot partition..

    I am not seeing that step in your instructions..? Am I missing something?

    1. This article was created before the Raspberry Pi Foundation decided to block SSH on all new installs.. Personally, I strongly feel that -lite- should have SSH enabled.. The average 1D10T user isn’t going to be using -lite- to worry about not changing the default password..

      I use (and modified) this a little bit
      http://www.aoakley.com/articles/2016-12-05-raspbian-enable-ssh.php

      Then I put it on a web server and use 2b.. Zipped or unzipped (remove the funzip if it is already unzipped)

  2. important!!!

    don’t forget new releases of raspbian come with ssh blocked; if you’re doing this in headless mode active ssh before dd

  3. I like to create a new image of my RPi after I’ve configured it to my needs, i.e. enable ssh, setup samba, setup dhcp, dns, etc.

    Now, if you need to re-image the SD card, it’ll be exactly how you want it.

    Example to create image:
    sudo dd bs=4M if=/dev/sdb of=raspbian.img

    1. Jenifer,

      By doing just that, you won’t have remote access after it reboots anyway… See the other comments about enabling SSH on a new image before installing.

      Not the worst method ever.. This is my primary way of re-installing a Pi board.. I typically host the image file myself or save it to the Pi board if it has a big enough SD card, so one isn’t dependant on the internet/external servers for the image.

      There are more complicated ways of checking the image download before it gets written too.

      1. it was working 1 or 2 times for me. I did not changed anything, but since than I was not able to get it working again. And I always end up with a system not able to boot (kernel panic)

            1. No,

              The 2020 images changed the ‘boot’ directory size, so the offsets need to be adjusted.

              Personally, it is on my todo list, but still further down the list.

              1. Hopefully it gets up your list :-)

                I tried many tricks, but it didn’t worked.

  4. Many thanks for this guide. It’s working quite well. Just one question. I know it’s require a ZIP file but would it be possible to use similar with a 7z file?

  5. Thanks for the guide!
    This actually still works for me with the latest raspbian lite.
    Just make sure you put the ssh file in the img and run the command without funzip if you use a .img directly like i did

    1. Interesting.. I’ll have to try this again..

      I wonder what changed (again) that it works now.

      The partition size of the -boot- image changed which messed up the script, so I am curious how/why it worked for you.

      1. Never mind…

        This article has been edited..

        It used to have instructions to add the ‘ssh’ file in the boot partition.

        As it stand now, reinstalling over the network is a lot less useful because you can’t regain access to your newly imaged Pi.

        1. Hi Kevin,

          I reinstalled over the network and regained access over ssh.
          i used an unzipped version of the raspbian image, opened the image by mounting it, then added an empty “ssh” file in the root directory of that image. Then i uploaded that changed image to a webserver and used method 2b from there.

          Regards,
          Lars

          1. I confirm this working again. Tested on Rpi3B+ with 2020-02-13-raspbian-buster-lite. And if you like it extremely lightweight, DietPi_RPi-ARMv6-Bullseye is working as well.

            1. Hi Joulinar,

              I’m following the same steps to re-flash my Raspberry with Raspberry pi desktop, but after completion when I’m resetting it, then on boot it’s kernel is getting panicked.

  6. directions seem to be missing Step 0:

    sudo su root

    And it doesn’t boot up. Kernel panic.

    Your blog post seems to be the only place on the internet that seriously tries to tell people how to reinstall the OS without pulling the SD card out. Too bad it currently isn’t working.

    A little more explanation about unpacking the archives would also be nice since funzip doesn’t work with “Raspberry Pi OS (Legacy)” (it’s in .xz format). Maybe just an entire step where you get the image file copied to the local drive and all unpacked instead of trying to send it directly to /dev/mmcblk0 in one step?

    It seems I will be digging the SD card out now and installing it the stupid way, but you should totally update and expand on this topic. This blog post is an island of really useful information in a sea of low-quality posts about how to install the OS exactly the way the official directions from Raspberry Pi Foundation clearly tell you to: by pulling the SD card out like a freaking neanderthal.

    thanks a lot for trying. please try again. the internet needs you.

    1. I experimented with this tonight..

      mount -o loop,offset=4194304 2020-02-13-raspbian-buster-lite.img ~/mnt

      cd /mnt

      touch ssh
      vi config.txt

      cd ..

      umount ~/mnt

      dd if=/root/2020-02-13-raspbian-buster-lite.img of=/dev/mmcblk0 bs=4M status=progress

      In a separate SSH session, before starting dd

      echo 1 > /proc/sys/kernel/sysrq

      After dd was finished,

      echo b > /proc/sysrq-trigger

      It closed my SSH session the moment dd was finished, I was glad to have a second terminal running.

      I don’t know which newer versions would work, but downloading and using the latest image does kernel panic.

      Using 2020-02-13 worked.

      1. In the script above, just after “vi config.txt” , don’t forget to also modify the file “wpa_supplicant.conf” with your wifi credentials (or copy the existing one), if the Pi is not connected by cable.

        Don’t ask me how I figured out.

        1. Where should be located?
          /etc/ doesn’t exist on the mounted virtual disk

  7. Has anyone tried this method for RPI4, 64Bit Raspberry Pi OS?

    What would the commands be?

      1. Well that will 100% not work.
        Any new Raspbery Pi OS image, neither contains default user credentials nor SSH enabled by default. So that wouldn’t work at all!

        Someone mentioned modifying the image directly. I think that could be a solution.

        1. Yeah.. I wrote the commands above on how to mount it and apply the changes you want.

          As for 100% not work? It gets reimaged remotely.. You want other changes made to the image, go ahead and make them before you image it.

          Test on a local Pi though, confirm your changes work before trying on a remote board, plus to check if the kernel panic still happens.

  8. Does anyone have an updated guide for a PI 4 and keeping SSH working after a reinstall? I’ve tried the current tutorial but, I had no luck getting it to work. I can’t seem to find much more on this project as, I guess it’s not really needed / wanted in the community?

    I’d think it would be great for times when I screw up my OS, trying to install different things. So, for anyone that has gotten to work (I’m using Pi OS Lite) could you please post a detailed step by step tutorial on it?

    If not, then maybe another guide or something that shows how to set this up. (Cause I cant find anything else). Appreciate it.

    1. I posted the commands needed above,

      You need to mount the raw image and edit the /boot directory with a username, hashed and salted password, and ssh file.

      WiFi settings too if you’ll be using it wirelessly..

      Should be able to script it, but I haven’t had the time to look at it.

Leave a Reply

Your email address will not be published. Required fields are marked *