@@ -100,15 +100,26 @@ if [[ "${EXTRACT_INITRD}" == "true" ]];then
100100 mkdir -p initrd_extracted
101101 if unmkinitramfs ${INITRD_NAME} initrd_extracted/ 2> /dev/null; then
102102 mkdir -p initrd_files
103- # Merge all layers (early, early2, main, etc.) preserving drivers and modules
104- for layer in initrd_extracted/* /; do
105- if [ -d " $layer " ]; then
103+ # unmkinitramfs has two output shapes:
104+ # - multi-layer initrd: extracts to early/, early2/, ..., main/
105+ # - single-layer initrd: extracts the cpio contents directly into the target,
106+ # so top-level entries are filesystem roots like bin/, etc/, sbin/.
107+ # Detect by presence of main/, which is unmkinitramfs's signal for multi-layer mode.
108+ if [ -d initrd_extracted/main ]; then
109+ # Multi-layer: merge ordered layers, preserving microcode + drivers + main fs
110+ for layer in initrd_extracted/early* / initrd_extracted/main/; do
111+ [ -d " $layer " ] || continue
106112 echo " Merging layer: $( basename $layer ) "
107113 rsync -a " $layer " initrd_files/
108- fi
109- done
114+ done
115+ echo " Successfully extracted multi-layer initrd"
116+ else
117+ # Single-layer: extracted contents are already the initrd root
118+ echo " Single-layer initrd, copying extracted contents"
119+ rsync -a initrd_extracted/ initrd_files/
120+ echo " Successfully extracted single-layer initrd"
121+ fi
110122 rm -rf initrd_extracted
111- echo " Successfully extracted multi-layer initrd"
112123 else
113124 echo " unmkinitramfs failed, falling back to manual extraction"
114125 EXTRACT_MANUALLY=true
0 commit comments