2021년 4월 27일 화요일

외장 nvme 에 ubuntu 설치하기

윈도우즈 PC에 연결한 외장 nvme 에 ubuntu 설치하기


설치야 그냥하면 되는데 부트로더가 외장 nvme 에 설치되지 않고 메인 ESP(EFI system partition) 에 설치되어 외장디스크 만으로 부팅을 할 수 없다.
이전과 같이 내장 디스크를 다 떼고 외장 디스크만 연결, 설치하면 되겠지만 이번엔 그럴 수 없는 상황.
검색해보니 시스템에 ESP 가 이미 있으면 ubuntu 설치시 새로 안만들고 기존 ESP 에 추가를 한다고...


기본적으로는 참고의 링크를 따라서 하는데 B 와 C 는 건너뛰고 D 와 E 는 변형했다.

A. 환경

장치명내용
/dev/nvme0ThinkPad T15, Windows 10
/dev/sdacrucial P2 M.2 nvme 512GB
/dev/sdbUSB 메모리 + Ubuntu 18.04.5 amd64 설치 이미지
(Rufus 로 DD 이미지 모드로 쓰기)

D.  ubuntu 설치

USB 메모리로 부팅하여 ubuntu 설치 진행, Installation type 이외는 원하는 대로 설정한다.
Installation type 에서 Something else 선택 후
/dev/sda > New Partition Table 로 기존 파티션 테이블 제거하고 파티션 2개를 만든다.
/dev/sda1 - Size: 256MB, Use as: EFI System Partition
/dev/sda2 - Size: 나머지, Use as: ext4, Mount: /
# 파티션 크기 및 파티션 개수는 마음껏 설정한다. (최소한 ESP 와 / 는 필요하다)
# 참고 페이지에서는 ESP 를 100MB 로 잡고 스왑파티션도 만든다.


E. grub 설치

USB 메로리에서 'Install Ubuntu'가 아니고 'Try Ubuntu without installing' 를 선택한다.
터미널에서 다음 실행

sudo umount /media/ubuntu/<인스톨 USB 의 UUID> # ubuntu/ 밑에 하나만 있음
gparted > /dev/sda > fat32 (Flags 에서 boot, esp 확인) > 더블클릭 > UUID 복사
sudo mount /dev/sda2 /mnt          # 루트 파티션 마운트
sudo vi /mnt/etc/fstab             # /boot/efi 의 UUID 를 위에서 복사한 것으로 변경 후 저장
sudo mount /dev/sda1 /mnt/boot/efi # esp 마운트

# chroot 를 사용하기 위한 설정
sudo mount -B /dev /mnt/dev
sudo mount -B /dev/pts /mnt/dev/pts
sudo mount -B /proc /mnt/proc 
sudo mount -B /sys /mnt/sys

modprobe efivars 

sudo chroot /mnt
root@ubuntu:/# grub-install -d /usr/lib/grub/x86_64-efi --efi-directory=/boot/efi/ --removable /dev/sda
Installing for x86_64-efi platform.
Installation finished. No error reported.

F. 메인 ESP 에서 ubuntu 정보 삭제

윈도우에서 명령창에서 실행

>diskpart DISKPART> list disk DISKPART> sel disk 0 # 메인 ESP 가 있는 디스크 선택 DISKPART> list part DISKPART> sel part 1 # 메일 ESP 의 파티션 선택 DISKPART> assign letter=x # X 드라이브에 연결 DISKPART> exit >rmdir /s x:\EFI\ubuntu

G. ThinkPad 부팅메뉴에서 ubuntu 정보 삭제

ThinkPad 의 경우 부팅 디바이스 리스트에도 ubuntu 가 생겨있다. 부팅시 F1 으로 BIOS SETUP진입 Startup > Boot > ubuntu 를 선택하고 Delete ubuntu 가 xubuntu 로 바꼈으면 F10 으로 저장 종료


참고.

https://www.58bits.com/blog/2020/02/28/how-create-truly-portable-ubuntu-installation-external-usb-hdd-or-ssd

2021년 4월 7일 수요일

WSL2 VHD 압축

 WSL2 와 Docker Desktop 을 좋다고 쓰고 있었는데 어느날 드라이브가 꽉찬 것을 발견했다.

원인을 조사하다보니 의외로 WSL2 에 설치한 ubuntu 가상 드라이브(VHD)가 상당히 컷다.

검색해보니 WSL2 상의 OS 에서 파일을 삭제해도 VHD 의 크기는 변하지 않는다고 한다.

즉, VHD 는 줄어들거나 재사용 되지 않고 커지기만 한다.

그래서 주기적으로 크기를 줄여줘야 한다.


1. 먼저 대상(ubuntu 20.04 의) VHD 를 찾는다.

탐색기에서 %localappdata%\Packages 에 들어가 *.vhd 로 검색한다

내 경우는  %localappdata%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhd

2. 커맨드 창에서 실행중인 wsl2 인스턴스를 종료한다.

>wsl.exe --list --verbose
  NAME                   STATE       VERSION
* Ubuntu-20.04           Running     2
  docker-desktop-data    Running     2
  docker-desktop         Running     2
>wsl.exe --terminate docker-desktop-data
>wsl.exe --terminate docker-desktop
>wsl.exe --terminate Ubuntu-20.04
>wsl.exe --list --verbose
  NAME                   STATE       VERSION
* Ubuntu-20.04           Stopped     2
  docker-desktop-data    Stopped     2
  docker-desktop         Stopped     2

# terminate 하고 실제 Stopped 가 되기까지 시간이 좀 걸렸다.
(안되는줄 알고 커맨드를 여러 번 실행)
# Docker 가 다시 시작할지 물어보는 창이 뜨면 Cancel

2-2. 더 간단한 방법

>wsl.exe --shutdown 

3. 커맨드 창에서 diskpart 로 vhd 크기 줄임

>diskpart
DISKPART> select vdisk file="1번에서 찾은 vhd 파일의 전체경로"

DiskPart가 가상 디스크 파일을 선택했습니다.

DISKPART> compact vdisk

  100 퍼센트 완료

DiskPart가 가상 디스크 파일을 압축했습니다.
3-1. 

4. Docker Desktop 영역 줄이기

2번에서 본 것 같이 Docker Desktop 도 WSL2 를 사용하는 것 같다.

간단히는 다음과 같이 할 수 있는데 하고나니 필요한 이미지도 지워졌다.

Docker Desktop > Troubleshoot (벌레모양) > Clean / Purge data
Delete the following data set(s)
[v] Hyper-V
[v] WSL 2
[v] Windows Containers


참고:

- https://stephenreescarter.net/how-to-shrink-a-wsl2-virtual-disk/

- https://github.com/microsoft/WSL/issues/4699#issuecomment-619394042


아직 테스트 못해본 방법

https://www.altaro.com/hyper-v/compact-vhdx-linux-filesystem/