레드필 부트로더를 하드에 이식해 보려 합니다.
예전 DSM 5, 6 시절에도 시도가 되었던 방법인데요.
헤놀로지 포럼에 가이드가 있을 정도로 검증된 방법이긴 합니다.
시놀로지를 BASIC 방식의 파티션을 설치한후 맨뒤에 남는 100MB 의 공간에 부트로더를 복사해 넣습니다.
과거의 DSM 6 시절 Jun's 로더는 50M 수준이라 이게 쉽게 가능했는데,
레드필은 덩치들이 너무 커져서 100M 안쪽으로는 도저히 들어갈 수가 없습니다.
그래서 2개의 하드를 활용하는 방법을 지금 연구중입니다.
불가능할것 같지는 않고요. 성공하면 공유 드리도록 하겠습니다.
어샘블리로 EFI로더 직접 짜면 그래도 사이즈에 구애를 받지 않는걸로 알고 있어서 여쭙니다
이 데이터 파티션의 사이즈를 조금 줄이고 그만큼 로더를 위한 공간을 더 확보할 수는 있지만,
이렇게 하면 시놀로지가 바로 알아차리고 디스크 오류를 뿜어내기 시작합니다.
그래서 시놀로지가 잡아준 파티션 영역은 건들지 않아야 합니다.
그 뒤로 확장가능한 남는 짜투리 공간이 100M 입니다.
확실히 소프트웨어 장사 하는 회사들이 다 그렇게 하나보네요
부트 파티션 두 개에 나눠서 로드하는게 가능한가요....? 저도 시스템 개발은 거의 초짜중에 초짜 수준이라(해봐야 eBPF로 샌드박스 만지는 정도..)그림도 안그려지네요
네, 일단 계획은 첫번째 basic 하드인 /dev/sda5 의 100 메가 영역에는 부트활성화 액티브하고
1. 원래 synoboot 1번 파티션의 내용을 그대로 전부 담습니다.
2. 1번의 남는 공간에 실제 시놀로지 DSM 부팅을 하게 되는 dsm커널 (initrd-dsm 과 zimage-dsm) 두개만 더 넣습니다.
3. synoboot 2번 파티션이 생략 가능하다면 건너뛰고 synoboot 3번 파티션을 위해
2번째 하드인 /dev/sdb5 에 100 메가 영역을 더 확보합니다.
4. 여기에는 friend 커널 부트에 필요한 initrd-friend, bzImage-friend 를 담습니다.
5. grub.cfg 에서는 set root=hd0,msdos5 , set prefix=(hd0,msdos5) 로 명시적으로 지정해서 위에 준비한 대로
부팅을 진행하고 부트엔트리에서는 다시 /dev/sdb5 에 대당하는 FRIEND 커널을 띄우기 위해
(hd1,msdos5)/initrd-friend, (hd1,msdos5)/bzImage-friend 를 로딩합니다.
6. Friend 커널 로딩이 진행되는 /root/boot.sh 의 맨 마지막에서는 다시 1번 하드의 dsm 커널을 마지막으로 로딩하기 위해 (hd0,msdos5) 파티션을 가리킵니다.
이렇게 시나리오를 짜 봤는데요. 문제가 있을만한 부분은 지적 부탁드립니다.
저도 시스템 프로그래밍을 관심있어하고 공부하는 유저로서 되게 흥미롭게 읽었네요..!
최근에 저는 SDS(Software Defined Storage)를 커널모듈로 개발할 수 있는걸 좀 만져보는 개인적인 연구를 하는 초짜입니다..ㅎㅎ Ceph처럼 좋은 SDS를 만들어보고 싶네요
늘 수고해 주셔서 감사합니다.
/dev/sda 에 grub2 를 update-grub 또는 grub-mkconfig 로 재설치해야 할것 같은데, 이부분이 많이 어렵네요.
위에 헤놀로지 포럼 가이드에서는 윈도우에 하드를 붙이는 번거로운 과정이 있어서 가능하면 리눅스 안에서 해결을 보려 합니다.
friend 커널도 다시 빌드루트해서 누락된 grub2 툴들을 포함시켰구요.
이제 grub-install 이나 grub-mkconfig 도 friend 커널 안에서는 사용할 수 있게 되긴 했는데,
넘을 산들이 많네요. 한 1주일 시간 투자하고 있는데,
grub tools 를 휙 apt 로 설치할 수 있는 환경도 아니고
grub 컨트롤에 대한 경험이 많지 않아서 시행착오가 많습니다. ㅎㅎ
재빌드용 Tinycore Linux 도 들어내야 할것 같고 딱 로더빌드한 당시의 Fix 된 버전만 하드에 이식 가능할것 같습니다.
대신 SmallUpdate 버전업 까지는 RamDisk Patch 가 가능하도록 해서 커버해 드리려고 합니다.
7.2.1 U4 -> U5 를 의미합니다.
헤놀 만들때 부트로더를 만든 후 USB 파티션을 그대로 SSD 128gb 에 복제해서 SSD를 부트로더로 썼었는데 이 방식과는 다른건가요?
시놀로지가 이미 사용하고 있는 하드에 파티션을 쪼개서 공간을 확보해야 합니다.
오늘까지 테스트한 결과로는 8G+2G 의 맨앞 2개 시스템파티션과 데이터 파티션 사이에 약 128MB 의 여유공간이 추가로 확인되었습니다.
여기에 확장파티션을 잡고 다시 로지컬 파티션들을 잡아서 시험중입니다.
이렇게 할때는 다시 데이터파티션 뒤쪽에 100MB까지 확장해서 사용을 할 수는 없습니다.
USB나 SSD에 담았던 만큼의 충분한 공간의 여유가 없습니다.
지금까지 grub-install 을 우분투 중심으로 처리해 보려했던것이 오산이였습니다.
pocopico님의 tinycore 가 출발였다는걸 망각했던게 1주일 시간을 허비하게 만들었네요.
tinycore linux 에도 전용 grub2 패키지가 있었네요.
답은 tinycore linux 포럼에서 찾았습니다.
https://forum.tinycorelinux.net/index.php/topic,19364.0.html
아래처럼 처리하면 일단 부팅은 가능하고 기존 FRIEND 로더로도 진입가능하게 조절할 수 있습니다.
커널들의 경로들이 달라서 grub.cfg 는 물론 손을 봐두어야 합니다.
tce-load -wi grub2-multi
sudo mount /dev/sda5 /mnt/sda5
sudo mkdir /usr/local/share/locale
sudo grub-install --target=x86_64-efi --boot-directory=/mnt/sda5/boot --efi-directory=/mnt/sda5 --removable
sudo grub-install --target=i386-pc --boot-directory=/mnt/sda5/boot /dev/sda
이제 좀더 안정적으로 만들어 줄 수 있는 스크립트 보완을 할 과정만 남은것 같습니다.
기초 테스트는 마친셈입니다.
마지막 안정성 시험을 계속 하고 있습니다.
이번주 너무 집중해서 잠이 좀 부족한 상황이네요.ㅎㅎ
wjz304님도 맨날 로더 개발에 빠지져서 잠이 부족하다고 하시는데, 저도 간만에 무리좀 했습니다. ㅋㅋ
TC 는 경량 리눅스라서 안에 포함하고 있는 유틸이 거의 없는 상태라 그때 그때 받아 내려야 하는데
grub-install (gub2-multi 패키지) 도 없는 터라 로더 이식 과정 중간에 툴 설치를 하도록 되어 있습니다. 약간의 대기시간이 들어가구요.
3번째 파티션은 특수하게 UUID 를 고정해서 TCRP 로더 파티션이란것을 인지하도록 관리하고 있는데,
UUID 를 TC 안에서 바꿀수 있도록 만들고 있습니다.
이와 관련해서도 TC 포럼을 찾아봐야 겠네요.
cmt alert