Running ChromeOS on an external Hard Drive/SSD — the easy way 👍.

Austin Hornhead
12 min readJul 23, 2020

--

Photo by Andrew Neel on Unsplash

What is Chrome OS?

Chrome OS is a fast, versatile and adaptive operating system created by Google that is based on Linux, which is used to run Chromebooks. Yep, it’s a Linux Distribution. To my surprise, it’s actually based on Gentoo Linux.

https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg

In my opinion, Chrome OS is generally great for working on projects that can be done on mobile apps. Basically, it’s like bringing mobile apps to a laptop.

A major plus for Linux users is that Chrome OS includes Crostini, a linux-container for Chrome OS, that even supports Linux applications. It has the well-known apt-package manager pre-installed, so if you’re familiar with Ubuntu, you might want to consider using this. Keep in mind that Crostini is still in beta-development though, so expect some things to be buggy or broken.

Is Chrome OS open-sourced?

For all those open source fans out there, Chrome OS might interest you. Chrome OS by itself isn’t open source — it’s Chromium OS that is. Chrome OS is based on Chromium OS (but more or less “Google-ized”) and sold commercially. Chromium OS, on the other hand, is the open source project that Google has released the source code for.

If you want to know more details about Chromium OS, pay a visit to their official site at https://www.chromium.org/chromium-os.

https://www.chromium.org/chromium-os

Basically, Chrome OS is an Android desktop version for laptops, specifically Chromebooks. It utilizes Google Chrome Browser for its UI, thus rendering web applications rather than desktop and mobile apps. Though this is true, Chrome OS is also able to install and run .apk files, giving the user an Android tablet-like experience.
However, I found that only armeabi-v7a .apks are able to run on Chrome OS using the method below. Most popular games are also not working.

https://www.google.com/chromebook/chrome-os/

There are other ways of using Chrome OS on a computer that isn’t a Chromebook, like installing CloudReady from neverware.

https://www.neverware.com/freedownload#intro-text

What’s my main purpose of using Chrome OS?

I’ve always been looking for a way to use Android on a laptop without a device running Android nearby. These cases are quite common for me, because there are Android apps I would like to use on the laptop, which aren’t available on desktop or web versions.

There are obviously other open source projects like Anbox and free Emulators like Genymobile.

Anbox is a great project, but it almost fails to work properly on every Linux system I have used so far — thus making it unusable. You can try your luck though.

Genymobile works well; the only drawback is that it’s like running Androidx86 on a Virtual Machine. Some laptops have low specs — like mine — and running a VM is horrifyingly resource heavy. Sure, VM’s are tweakable and you can set some parameters lower so that CPU and RAM usage are not as loaded, but the performance drops noticeably. Too much.

So, the last option was to try out Chrome OS.

What are the disadvantages of using Chrome OS?

Obviously, if you have a higher level of privacy awareness, Chrome OS is definitely something I do not recommend using on a daily basis.

Also, if you plan to use a single operating system on your computer, switching back and forth using GRUB may or may not annoy you, as you’d have to reboot every time you want to make the switch.

The Guide.

Okay, that was quite a bit of stuff to take in. You made it. Welcome to the guide.

The official guide is hosted on the developer’s GitHub repository. What I’m doing here is writing a guide not written in the repo’s wiki or README.md, but rather a step-by-step recipe to making a working laptop that runs Chrome OS on an external drive with multiple partitions.

Since I am a Linux user, this guide will be from a Linux user’s perspective. Nevertheless, a Windows user guide will also be included.

Disclaimer: I DO NOT guarantee that all your files will be safe and will not become corrupted or be deleted, including system files and backup files. You are doing this at your own risk. Please do not blame me or the Brunch community if you mess up. Respect.

What you’ll need:

  • A computer with Intel 64-bit CPU and GPU. 32-bit computers are not supported anymore. The only AMD CPU supported so far is Stoney Ridge (refer to AMD-CPU-list), only with “grunt” recovery image. Nvidia graphic cards are not supported.
  • An external Hard Drive/SSD.
  • A power cable (yep it’s gonna be a long night).
  • Preferably a computer running Linux. The steps will be more complicated if you’re using Windows.
  • Some patience. Don’t throw the laptop at the wall.

Step 1: Download Chrome OS recovery images

ChromeOS recovery images can be downloaded from here:

https://cros-updates-serving.appspot.com

Currently:

  • “rammus” is the recommended image for devices with 4th generation Intel CPU and newer.
  • “samus” is the recommended image for devices with 3rd generation Intel CPU and older.
  • “grunt” is the image to use if you have supported AMD hardware.

Just click on the latest recovery image (biggest number, currently r83) to download.

#In case the link above does not work, backups have been made and direct downloads are available on the Troubleshooting and FAQs GitHub Wiki page.

https://github.com/sebanc/brunch/wiki/Troubleshooting-and-FAQs

Step 2: Download the Brunch Framework

Go to the releases page on their GitHub repo and download the release corresponding to the Chrome OS recovery image version you have downloaded.

https://github.com/sebanc/brunch/releases/tag/r83-k4.19-stable-20200708

Step 3: Download GParted and fire it up.

I use GParted as it’s the partition manager I’ve been using for everything related to partitioning. You may use any partition manager of your choice, just as long as it able to do the following steps.

Firstly, connect your external drive to your computer and open GParted. If you do not see your external drive, which is usually named /dev/sdb, try refreshing the device’s list from the top left corner: GParted > Refresh Devices .

Choose your external hard drive/SSD (normally /dev/sdb).

Next, right-click on the partition (usually /dev/sdb1/ if you don’t have any other partitions) you would like to use. You will see a list of options to choose from. If you haven’t done this already, format the partition to ext4. Formats other than ext4 and NTFS will not work.

Formatting your external drive is an easy step.

Once that’s done, if you would like to save some storage for backing up your current system, you have the choice to make a new partition by resizing your partition, if you have enough storage space. If not, skip to the next step.

Right clicking on a partition in the external drive will bring up some options. Choose “Resize/Move”.

Resize it to however much you want. I resized my original partition to 1.8 TB so I have 200 GB left for the unused partition. Keep in mind when formatting with GParted you have to use the exact measurements in MiB (Mebibytes). 200 GB is exactly 190735 MiB. It’s best to use an online converter to work out how much MiB you need.

IMPORTANT: You will need at least 14 GB to be able to boot ChromeOS, so make it bigger than 14 GB.

Keep in mind that when resizing partitions you only change the values in “Free space following(MiB):”. Do not change anything else if you don’t know what you’re doing. I usually keep the partition to the left side and free space on the right.

Lastly, click on “Apply all changes” to… well, apply all your changes.

Click it and wait. Maybe eat something while you’re at it.

Once the processes have been completed, you should have a new partition named /dev/sdb2. Well done so far.

For Windows, I would suggest using the default partitioning manager. The instructions above are similar to the ones you would use for Windows.

Step 4: Time to install Chrome OS

Before we get started, BACKUP EVERYTHING. Or make sure you already have. Done? Ok, let’s go.

Linux:

1) Extract the Chrome OS recovery image.

2) Extract the Brunch release with either a file manager or this command:

tar zxvf brunch_< version >.tar.gz

3) Identify your Hard Drive/SSD device name e.g. /dev/sdX (Be careful here as the installer will erase all data on the target drive).

4) If you did not create an extra partition before installing, install ChromeOS on the HD/SSD:

sudo bash chromeos-install.sh -src < path to the ChromeOS recovery image > -dst < your Hard Drive / SSD. e.g. /dev/sdX >

5) Reboot your computer and boot from the external drive (refer to your computer manufacturer’s online resources).

6) (Secure Boot only) A blue screen saying “Verification failed: (15) Access Denied” will appear upon boot and you will have to enroll the secure boot key by selecting
“OK > Enroll key from disk > EFI-SYSTEM > brunch.der > Continue”. Reboot your computer and boot again from the external drive.

7) For those who have made an extra partition, mount your external drive’s second partition from the Linux terminal and use it as the destination for the installation.
In my case:

mkdir -p ~/tmpmount
sudo mount /dev/sdb2 ~/tmpmount

With all of that in mind, PLEASE be aware that there is absolutely a risk that you may wipe that external drive if you don’t put in the correct script. All dualboot scripts will look something like this (see below); note the inclusion of an img file in the -dst and the -s parameter for img size. You can make this any size you want, but if it’s too large it can take a very long time to make, and the file cannot be resized later.

Now to create the Chrome OS disk image:

sudo bash chromeos-install.sh -src /home/austin_sama/Chrome/chromeos_13020.87.0_rammus_recovery_stable-channel_mp-v2.bin (path to chrome os recovery img) -dst ~/tmpmount/chromeos.img -s 199 (size for Chrome OS to use in GB, system partitions will take around 10GB, the rest will be for your data)

Note that the size should be a bit smaller than the size you have on your partition. The free space and the file size can’t be the same for a number of reasons. If your free space is even half a GB larger, it’s fine. So in my case, if it’s 200.5GB or just 201GB it’s ok, but the img needs to be smaller to fit.

Remember to check your partition though. If you come across an error like this:

Not enought space to create img file

They spelt enuff wrong. Haha.

Anyway, the most probable reason for this cause is because your external drive has files written over for linux reserves. I only recently found out about this thanks to Sebanc, the developer of Brunch. He sent me this link: https://odzangba.wordpress.com/2010/02/20/how-to-free-reserved-space-on-ext4-partitions/

Most linux distributions reserve 5% of new partitions for the root user and system services. The idea here is even when you run out of disk space, the root user should still be able to log in and system services should still run… this won’t happen if there is no space on the root partition.

So, to solve this, there is a simple fix that I found on the link. Run this command in the terminal:

sudo tune2fs -m 0 /dev/sdb2

If you get an output similar to this:

tune2fs 1.45.6 (20-Mar-2020)
Setting reserved blocks percentage to 0% (0 blocks)

Then the problem should be resolved. If it doesn’t, then issue that error on GitHub or ask Sebanc and the moderators in the support groups. You can find the links below.

8) When the chromeos.img is done being created, copy the boot entry that is output to the terminal into your grub. Either directly or by editing 40_custom in /etc/grub.d then at last running “sudo update-grub” in the terminal.

There are 12 partitions that needs to be installed altogether. You should now see a partitions installing through the terminal. If your output is like this:

Writing partition 1
10.0MiB 0:00:00 [45.0MiB/s]
[ <=> ] (mini terminal installing bar)
Writing partition 2
32.0MiB 0:00:00 [41.9MiB/s]
[ <=> ]
Writing partition 3
2.34GiB 0:00:49 [48.1MiB/s]
[ <=> ]
Writing partition 4
32.0MiB 0:00:00 [47.5MiB/s]
[ <=> ]
...

Then everything should be installing fine. You now need to wait until every partition has been installed successfully. After that, there should be an output to the one similar below:

ChromeOS installed.
To boot directly from this image file, add the lines between stars to either:
- A brunch usb flashdrive grub config file (then boot from usb and choose boot from disk image in the menu),
- Or your hard disk grub install if you have one (refer to you distro's online resources).
********************************************************************************
menuentry "ChromeOS (boot from disk image)" {
img_part=/dev/sdb2
img_path=/chromeos.img
search --no-floppy --set=root --file $img_path
loopback loop $img_path
linux (loop,gpt7)/kernel boot=local noresume noswap loglevel=7 disablevmx=off \
cros_secure cros_debug loop.max_part=16 img_part=$img_part img_path=$img_path
initrd (loop,gpt7)/initramfs.img
}
********************************************************************************

Now copy the boot entry (that up there) into your grub. Either directly or by editing 40_custom in /etc/grub.d (without the *’s), save it, then at last running “sudo update-grub” in the terminal.

Reboot your computer. If everything went well, the GRUB menu should appear, select Chrome OS and after a few minutes (the Brunch framework is building itself on the first boot), you should be greeted by Chrome OS startup screen. You can now start using Chrome OS on the go (every time you want to use Chrome OS, remember to plug in your external drive you have Chrome OS installed on).

Windows:

If using Windows, follow the steps normally to install to dualboot with a second USB device. Make sure you can have both the external drive AND the other USB flash drive connected at the same time.

It’s best to read the README.md directly from GitHub, but I’ve included these screenshots if you’re lazy.
For steps 4 and 5 the sudo commands are the same as the ones for Linux (see “Install Chrome OS on Linux”).

- At step 4 of the Windows dualboot instructions (on Brunch’s GitHub readme), mount the external drive’s partition instead of an internal one.

- Continue with the installation as normal, at step 6 I suggest copying the grub entry you are given in the into a text file saved somewhere that you can access later to add that boot entry to your PC’s grub. If you do not have grub already, you will need to install it.

- Please keep in mind, some instances of grub cannot properly boot img files due to a bug, this can be worked around by mounting either the img or the Brunch USB in a Linux distro and copying the grubx64.efi file over from the 12th partition and replacing your own with it (Keep Backups!).

Most of the instructions above (Linux and Windows) are modified from Brunch’s GitHub README.md and with the help of a moderator from the Brunch group.

This is really all possible thanks to the awesome developer Sebanc from GitHub. The project Brunch has been around for some time and really deserves praise for making this work.

I hope you found my guide useful and please feel free to share your thoughts with me. Visit my Telegram channel to know about more.

If you have any questions about Brunch that you are unclear about, please read the Wiki and README.md on the GitHub page first before contacting the support groups from Telegram and Discord. This act of kindness would be very appreciated.

Special thanks to the moderator for helping me out with some questions and guiding. They’re an active moderator both on Brunch’s Discord and Telegram groups.

Brunch Project Links:

Thanks for reading! Why not visit my Telegram channel while you’re at it? Read interesting articles at: @AustinSama’s Blog

--

--

Austin Hornhead

Linux & Tech enthusiast. Computer Science Bachelor Student. Languages learning: Java, Javascript, C, Python, Bash, Markdown, HTML. Love cats. And food.