![최대 절전 모드에서 다시 시작하기 위한 사용자 공간 명령은 무엇입니까?](https://rvso.com/image/1493924/%EC%B5%9C%EB%8C%80%20%EC%A0%88%EC%A0%84%20%EB%AA%A8%EB%93%9C%EC%97%90%EC%84%9C%20%EB%8B%A4%EC%8B%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EA%B3%B5%EA%B0%84%20%EB%AA%85%EB%A0%B9%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
오랜 시간동안 제가 사용했던
echo disk > /sys/power/state
최대 절전 모드로 전환하기 위해 /dev/sda10
데비안 배포판의 initrd를 사용하여 재개했습니다.
그런데 최근에 레이드배열로 바꿨어요완전히 사용자 정의된 initramfs를 사용해야 합니다. (기존 initrd를 수정하려는 시도가 작동하지 않았기 때문에 처음부터 빌드해야 했습니다)루트 파티션을 마운트하기 전에 RAID 어레이를 설정하려면
재개하는 방법에는 2가지가 있습니다. 커널이 resume=
커널 매개변수를 사용하여 스왑 파일 시스템을 직접 읽을 수 있습니다.(그리고 init를 시작하기 전에 다시 시작됩니다) ; 아니면 약간의 사용자 공간이 필요합니다(예: 모듈 로드)스왑 파티션에 액세스할 수 있습니다.
그렇다면 재개하기 위한 사용자 공간 명령은 무엇입니까? /dev/mapper/isw_qfyzrvbsusf_Volume0p9
?
답변1
짧은 대답은 /sys/power/resume입니다.
대답이 훨씬 길어졌습니다. 왜냐하면 그것 자체로는 좋은 일이 별로 없기 때문입니다. 대부분의 배포판에서는 init / PID 1 프로세스(초기 사용자 공간)에서 재개를 시작할 것을 권장합니다. 그러나 지침에서는 이력서 대상을 사용하여 부트 로더에 커널 cmd 줄 인수를 추가하라는 지시를 거의 항상 알려줍니다. 그 이유는 거의 모든 경우 initramfs 빌드 도구(dracut / mkinitcpio / initramfs-tools)가 구성의 해당 인수에 의해 자체적으로 트리거되기 때문입니다.
귀하의 예와 배포판을 토대로 일시 중단(swsusp)을 위해 낮은 수준의 커널 인터페이스를 사용하고 있다고 가정합니다. 일시중단 프로세스를 시작하는 데 사용할 수 있는 다른 유틸리티가 많이 있습니다. 이들 모두는 근본적으로 첫 번째 항목인 swusp를 둘러싼 래퍼입니다.
- 스왑- 낮은 수준의 커널 인터페이스; 사용자 공간 인터페이스는 sysfs를 통해 이루어집니다.
- 우스워프- 낮은 수준의 사용자 공간 소프트웨어 일시 중지 래퍼 - s2disk, s2ram 유틸리티 제공(적극적으로 유지 관리되지 않음)
- pm-utils- 프로세스를 구성하는 고급 스크립트
- 시스템 일시 중지- systemd 시스템에서는 커널 인터페이스를 통해 일시 중지 작업을 시작하는 일시 중지 대상을 사용할 수 있습니다.
이력서 구성
initramfs 이미지를 사용하여 Linux에서 부팅 순서를 지나치게 단순화한 개요는 다음과 같습니다.
[BIOS] ==> [부트 로더] ==>[임시 rootfs의 커널 - initramfs] ==> [rootfs의 커널 - 드라이브]
재개가 발생할 수 있는 initramfs 단계 끝에 작은 창이 있습니다. 커널이 PID 1(systemd 또는 init)을 시작한 후 RAID용 드라이버를 로드했지만 실제 드라이브를 마운트하기 전입니다.
일반적인 이력서 구성의 예를 제공했습니다. 이는 제공한 재개 경로가 스왑 파티션이라고 가정합니다. 스왑 파일이 포함된 '일반' 파티션이 아닙니다. 스왑 파일에는 추가 구성이 필요합니다. systemd 방법은 다릅니다. 이는 재개 프로세스를 트리거하는 이력서.대상을 기반으로 하는 udev 규칙을 사용합니다. 보다 전통적인 부트로더/initramfs 이미지 접근 방식이 작동하지 않는지 조사해 볼 가치가 있습니다. 이는 init 기반 시스템이 수행하는 방식과 직접적인 연관이 있습니다. 그러나 자신의 스크립트를 수동으로 삽입하고 상호 종속성/상대 타이밍을 올바르게 얻는 것은 조금 더 까다롭습니다.
결론은 재개가 트리거되는 시점은 커널이 '실제' 하드 드라이브를 마운트하는 시점 바로 전이라는 것입니다. 따라서 커널이 전체 fs를 마운트할 수 있다면 스왑 파티션만 마운트하는 데 필요한 모든 기능과 정보도 갖게 됩니다.
스왑 파티션이 fstab을 통해 마운트되었는지 확인하세요. dracut initramfs 도구는 특별히 이를 찾고 스왑 파티션이 없으면 이력서 모듈을 포함하지 않습니다.
부트로더 구성
grub2를 사용한다고 가정하면 일반적으로 다음 명령을 사용하여 Grub 이미지 업데이트 의 필드 resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9
에 추가해야 합니다 .GRUB_CMDLINE_LINUX_DEFAULT
/etc/default/grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
initramfs를 다시 빌드하세요.
재개 기능(및 이미 수행한 raid 수정 사항)을 사용하여 initramfs 이미지를 다시 빌드해야 합니다. 데비안은 initramfs를 생성하기 위해 dracut과 initramfs-tools를 모두 제공합니다. 이력서 모듈을 사용하여 다시 생성해야 합니다. dracut을 사용하여 명령줄 인수를 추가합니다 --add resume
. 를 사용하여 구성 파일에 update-initramfs
항목을 추가합니다.resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9
/etc/initramfs-tools/conf.d/resume
그래야 합니다. 귀하의 구성에 대해 몇 가지 올바른 가정을 했다고 가정합니다.
편집하다; 시간을 정확하게 맞출 수 있다고 가정하면 스왑 파티션의 주/부 장치 번호를 init 스크립트에서 /sys/power/resume으로 에코하여 재개를 트리거할 수 있습니다. initramfs(또는 initd) 이미지에는 이력서 지원이 있어야 합니다. 그렇지 않으면 해당 sysfs 항목과 해당 기능이 존재하지 않습니다. 보다https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/983805
답변2
파일은 /sys/power/resume
.
이력서를 트리거하려면 장치의 메이저와 마이너가 해당 파일에 기록되어야 합니다. 따라서 다음 명령으로 이를 달성할 수 있습니다.
echo `stat -c %t /dev/mapper/isw_*_Volume0p9`\:`stat -c %T /dev/mapper/isw_*_Volume0p9` > /sys/power/resume