В цій статті розглянемо встановлення Linux Ubuntu 24.04 LTS на зовнішній SSD диск. Коли може виникнути така потреба? Припустимо у вас є ноутбук, або стаціонарний ПК, з встановленою Windows, зі створеними дисками/розділами, які вже досить заповнені. Далі, припустимо вам необхідно працювати в Linux, скажімо в напрямку Software Defined Radio, або для написання Linux драйверів швидкісних інтерфейсів (PCIe, 10G+ Ethernet, тощо), ASIC design, або для іншої специфічної задачі. У віртуальній машині виходить або повільніше, або суттєво складніше, виникає потреба робити додаткові костилі. Мені, наприклад, знадобився Linux для роботи з недорогою (15-75$) FPGA платою Storey Peak (специфічна конфігурація через openocd, обмін даними по PCIe, тощо). В подібних ситуаціях набагато простіше встановити Linux на окремий швидкий SSD диск, з яким до того ж можна працювати з різних ноутів/ПК.

Не знайшов в інтернеті докладної статті, в якій були б описані всі важливі моменти, тому опишу нижче власний досвід.

Linux буде встановлюватись на диск Western Digital Black SN850X 2TB NVMe M.2 2280 PCIe 4.0 x4 (WDS200T2X0E) в зовнішній кишені Asus TUF Gaming A1 M.2 SSD NVME Enclosure USB 3.2 Type-C (ESD-T1A/BLK/G/AS).

Ця інструкція призначена для нових систем з UEFI/ESP і не буде працювати на старих системах, що використовують BIOS/MBR. Іншими словами, Linux на зовнішній SSD потрібно встановлювати на ноуті/ПК з підтримкою UEFI/ESP і завантажуватись зі створеного диску на ноуті/ПК з підтримкою UEFI/ESP. Насправді така умова не є проблемою, оскільки переважна більшість ноутів/ПК зараз використовують UEFI, а не застарілий BIOS.

Бажаний результат - створити portable SSD з Linux, не прив’язаний до конкретної конфігурації заліза, що може вантажитись на будь-якому ноуті/ПК з підтримкою UEFI.

Обираємо дистрибутив Linux

Обрав дистрибутив Ubuntu, оскільки маю з ним найбільше досвіду і для роботи з DSP/SDR/FPGA (моя спеціалізація) Ubuntu має необхідні інструменти. Саме перед написанням гайду вийшла 24.04 LTS, вирішив одразу її затестити. Коли буде нова версія, яка включатиме цікаві оновлення (скажімо в напрямку io_uring), тоді оновлюсь.

Лінк на завантаження образу диску Ubuntu 24.04 LTS.

Важливо переконатися, що завантажений образ диску не містить бітових помилок. Щоб впевнитися у цьому можна порахувати хеш образу диску і порівняти з очікуваним значенням.

Очікуваний хеш образу диску можна глянути тут. В моєму випадку це 81fae9cc21e2b1e3a9a4526c7dad3131b668e346c580702235ad4d02645d9455

Порахувати хеш образу диску у Windows PowerShell можна так:

PS C:\Users\ekoro\Downloads> Get-FileHash -Path ".\ubuntu-24.04-desktop-amd64.iso" -Algorithm SHA256
Algorithm    Hash                                  Path

---------    ----                                  ----

SHA256     81FAE9CC21E2B1E3A9A4526C7DAD3131B668E346C580702235AD4D02645D9455

Зійшлося)

Запис образу дистрибутиву Linux на флешку

Дуже бажано брати відносно нову флешку, щоб виключити помилки запису і повязані з цим неприємні моменти під час інсталяції Linux (особисто з такою проблемою не зустрічався, але бачив в інтернеті скарги). Також у нової флешки зазвичай буває більша швидкість запису/читання і процедура встановлення пройде швидше.

На Windows створити флешку для встановлення Linux найпростіше в Rufus, який можна або завантажити з сайту додатку, або встановити в магазині додатків Microsoft. Я використовував версію 4.4.2103.

По роботі з Rufus є докладна інструкція, але на випадок її зникнення опишу нижче необхідні кроки зі скрінами.

Запускаємо Rufus, обираємо диск (флешку) і образ інсталяційного диску Ubuntu. Більшість значень лишаємо за замовчуванням. Дуже важливо перевірити, що обрана саме інсталяційна флешка (щоб випадково не записати образ на один із ваших системних дисків, видаливши на ньому корисні дані).

Rufus settings

З’явиться наступне вікно, погоджуєтесь з дефолтним значенням:

Rufus: ISOHybrid image message

Якщо Rufus не містить необхідного бутлоадера Grub, він напише вам, що спробує його завантажити з інтернету:

Rufus: grub download message

Натискаєте кнопку Start, вас попередять, що всі дані з диску будуть видалені:

Rufus: data will be destroyed message

Натискаєте OK і за кілька хвилин образ диску буде записаний на флешку.

Запуск Live Linux з інсталяційної флешки

Перед початком інсталяції Linux необхідно виконати певні маніпуляції з дисками, що найзручніше зробити в GParted. Для цього необхідно запустити Live Linux з інсталяційної флешки (опція “try Ubuntu”). Виглядає просто, але є нюанс. Після вибору в UEFI boot menu завантаження з флешки і, далі, вибору “try Ubuntu”, система крашилась з повідомленням на зразок “Oh No! Something has gone wrong. A problem has occurred and the system cannot recover” бла-бла-бла. Натискання Ctrl+Alt+F3 не допомагало. Пошук в інтернеті особливо нічого не дав. Єдине знайшов, що проблема виникає досить давно, в основному на етапі оновлення релізу і стосується графічної підсистеми. Грішив на баги в релізі 24.04, на битий образ, на неякісну флешку, але проблема була в іншому. Як виявилось, проблема виникала при підлюченні монітора до Display Port GeForce RTX 3070. При підключенні по HDMI до дискретної, чи вбудованої відеокарти, все прекрасно працює.

Операції з розділами дисків

Нарешті добрались до суті) По-перше, нам потрібно створити необхідні розділи на зовнішньому SSD. По-друге, необхідно мінімально модифікувати (на час інсталяції) флаги ESP розділу ноута/ПК, на якому виконується інсталяція LInux на зовнішній SSD.

[!NOTE]

Під час роботи з Live Linux одразу не подумав, що там теж можна робити скріншоти. Тому зробив фото вікон. Вийшло не так естетично, як могло би бути у випадку скрінів :(

Навіщо модифікувати ESP розділ ноута/ПК?

Справа в тому, що багато дистрибутивів Linux під час інсталяції встановлюють завантажувач Grub в перший ESP розділ, який знайдуть, а це зазвичай буває ESP розділ ноута/ПК на якому інсталюється Linux на зовнішній SSD. Внаслідок цього Linux на SSD прив’язується до ноута/ПК на якому виконувалась інсталяція, створюється типова dual boot конфігурація, Linux на зовнішньому SSD не вдасться завантажити на іншому ноуті/ПК і при відключенні зовнішнього SSD отримаєте помилку завантаження на на тому ноуті/ПК, на якому був модифікований ESP розділ. Іншими словами, в такому випадку створюється не повноцінний portable Linux, який можна завантажувати на будь якому ноуті/ПК, що підтримує UEFI.

В деяких релізах Ubuntu під час інсталяції можна обрати на який ESP розділ встановлювати Grub, але судячи з відгуків така опція не завжди працює і доводиться виконувати багато вправ по відновленню статус-кво (видалення бутлоадера Linux з основного ESP розділу і встановлення його на ESP розділ зовнішнього SSD).

Як можна вирішити таку проблему? Ну можна на час інсталяції Linux фізично відключити рідний диск (диски) ноута/ПК, на якому виконується інсталяція. Як на мене, це костильне рішення, не зручне і часто неможливе в реалізації (якщо, скажімо, корпус ПК опломбований).

Другий варіант, відключити диски в налаштуваннях UEFI. Деякі системи дають таку можливість, наприклад Dell:

image-20240511120947724

На моєму ПК з Asus материнкою, нажаль, немає такої можливості. Однак лишається ще один адекватний варіант - зняти флаги esp/boot з основного ESP розділу на час інсталяції Linux і по завершенню інсталяції повернути флаги на місце. Як це зробити розглянемо нижче.

Отже, завантажуємось з інсталяційної флешки, обираємо “Try Ubuntu”, після завантаження Live Ubuntu відкриваємо GParted, обираємо в ньому основний диск, на який встановлено Windows. Перед виконання операцій в GParted дуже важливо перевіряти на якому диску ви ці операції виконуєте (щоб випадково не видалити дані на інших дисках).

image-20240511121820527

Бачимо, що на основному диску є ESP розділ розміром 128 МБ з FAT32 і флагами boot/esp. Маємо зняти ці флаги на час інсталяції Linux. Для цього клацаємо правою клафішею миші на строчці з розділом диску і обираємо Manage Flags:

image-20240511122455966

Відкривається вікно налаштувань флагів розділу. Знімаємо галочки з флагів esp та boot (при цьому автоматично встановиться флаг msftdata, це нормально):

image-20240511122648496

Після натиснення Сlose бачимо, що флаги boot/esp зникли:

image-20240511122849302

Далі обираємо в GParted зовнішнй SSD диск (можна орієнтуватись по розміру диску).

Якщо зовнішній SSD новий, щойно з магазину, можна створити на ньому нову GPT таблицю розділів:

image-20240511123341514

image-20240511124105330

І далі підтвердити обрану дію:

image-20240511123511466

Якщо на диску вже були розділи, можна їх видалити (відмонтувати розділ, видалити розділ, а потім знову “Apply All Operations”):

image-20240511123750318

image-20240511123902535

Далі створюємо розділи. Спершу ESP розділ на зовнішньому SSD диску. Це розділ розміром 100 МБ і FAT32:

image-20240511124310217

image-20240511124352559

Далі створюємо основний ext4 розділ на весь обсяг диску, що лишився. На цей розділ буде встановлюватись безпосередньо Linux:

image-20240511124539796

image-20240511125008536

image-20240511125105677

За бажанням можете створити окремий swap розділ і обрати його при встановленні Linux для файлу підкачки. Я окремий розділ для swap не створював. Якщо не створювати розділ для swap, Linux зробить файл підкачки, розмір якого простіше за потреби змінити в Linux порівняно з реалізацією swap в окремому розділі.

Тепер встановлюємо boot/esp флаги для ESP розділу зовнішнього SSD:

image-20240511125208302

image-20240511125248622

image-20240511125325321

Інсталяція Ubuntu

Тепер можна зкривати GParted і запускати інсталяцію Ubuntu:

Як бачимо, тут є можливість обрати розділ для інсталяції бутлоадера. Зараз у мене на всіх дисках системи всього одн розділ з флагами boot/esp (а саме розділ зовнішнього SSD, оскільки з ESP розділу основного диску ці флаги були зняті). Як би воно працювало у випадку двох активних розділів ESP не перевіряв.

Встановлюємо точку монтування / для розділу в який будем інсталювати Linux:

В результаті має вийти ось так:

Далі йде класичне встановлення Ubuntu, нічого цікавого.

По завершенню інсталяції Ubuntu і перезавантаження не забуваємо запустити GParted (з інсталяційної флешки, або щойно встановленої Ubuntu) і повернути boot/esp флаги в основному ESP розділі ноута/ПК з якого інсталювали Linux:

image-20240511131546804

Перевірка результату

Нагадаю, що наша мета створити portable SSD з Linux, не прив’язаний до конкретної системи, що може вантажитись на будь-якому ноуті/ПК з підтримкою UEFI. Для перевірки результату вимикаємо ноутбук/ПК на якому інсталювали Ubuntu на зовнішній диск, відключаємо SSD, вмикаємо ноутбук/ПК, щоб пересвідчитись, що завантаження Windows без зовнішнього диску виконується штатно. Далі підключаємо зовнішній SSD до іншого ноута/ПК з підтримкою UEFI і пробуємо завантажитись з зовнішньго диску (для цього звісно потрібно обрати в boot menu UEFI завантаження з зовнішнього диску). Якщо завантаження одразу не пішло, перевірте в налаштуваннях UEFI чи ввімкнений Thunderbolt на етапі завантаження і чи дозволене завантаження з USB по Thunderbolt.