上尉
- 注册时间
- 2006-11-24
- 金币
- 697 个
- 威望
- 26 个
- 荣誉
- 8 个
累计签到:21 天 连续签到:0 天 [LV.50]初入江湖
|
4、修改initrd.gz 压缩包中 liblinuxlive
% V% M0 J. p4 [9 ]+ G
0 K% l5 t$ W! b+ [, D& i6 Q # not enough loop devices? try to create one.3 [' j8 v4 q+ ?. F; V% ~
# This will work only with newest kernels. Tested with 2.6.23-rc2.
* V6 t, x/ p3 Q5 d$ N, P) k- M if [ $ERR -eq 2 ]; then
4 H" j: P6 x" n( l/ f1 }5 e& [3 f4 H LOOPDEV=$(mknod_next_loop_dev)
& o5 ?$ L8 o7 _ OPTIONS=$(echo "$OPTIONS" | sed -r "s/,loop//")
: }( W' }, h* C, I/ j; e% c5 T4 k losetup "$LOOPDEV" "$DEV" 2>/dev/null; C+ u( Z3 j6 n1 {9 T7 P5 A+ C# F
mount -n -o $OPTIONS "$LOOPDEV" "$2" >/dev/null 2>&10 c5 |2 h+ l8 {+ H1 ?0 y
ERR=$?! R, _4 K; z- m8 q2 F4 c
fi% i Z' r. g4 g9 [! c+ t7 [
# 增加下面一节
- a3 l9 i1 C) R) }: V+ D, N if [ $ERR -ne 0 ]; then
/ }2 K" C8 n3 }: U7 S0 F if [ "$3"="iso9660" ]; then
' ?$ [$ E5 d/ \3 f5 M9 f LOOPDEV=$(mknod_next_loop_dev)% ^, ]1 P" ]. T: j1 u! X. ?
losetup "$LOOPDEV" "$DEV" 2>/dev/null. o) l, }5 O: h8 g1 K( G
mount -r -t $3 "$LOOPDEV" "$2" >/dev/null 2>&1* A) g, Y; P9 Y) ^
ERR=$?
; s6 i! w+ C8 n$ a' e: w fi
* v2 d/ z# K1 a7 z fi
; F. O5 w1 Q! D # if nothing works, try to force read-only mount
: K* S8 C- S1 T6 d- d8 e! [ if [ $ERR -ne 0 ]; then
' y! j+ O. Y' O& `* m n mount -n -r -o $OPTIONS "$DEV" "$2" >/dev/null 2>&14 A0 \$ `9 {! v
ERR=$?& i) ^8 P. l: k) I' u; b
fi
( f0 A/ A) {: a if [ $ERR -ne 0 ]; then rmdir $2 2>/dev/null; fi2 n9 a' J7 q( }! G
return $ERR
. \5 D& q5 B4 \! A}
5 a, H9 p6 I8 @) ^ ], w * L" Y1 u& ^8 x; s" g
5、initrd.gz的 linuxrc 中的修改
) P+ x8 n8 e, P8 ~9 }# C, ]- x ?0 Q
, p! [: K' b# x% D# _, {& O" u Y) j( Z" r# First, try from= boot argument, if given
8 r2 b; Z: L. NDATAFROM=$(cmdline_value from)4 c! t& z' g6 M1 L6 _* L
if [ "$DATAFROM" ]; then
/ S0 L+ _$ a6 G" {% p, p' @ DATAFROM=$(find_in_computer $DATAFROM)+ @' D$ M, q# a! ^3 B6 t; \
if [ "$DATAFROM" ]; then/ p% C4 x, n9 J3 \$ P
mount_device $DATAFROM $LOOPMOUNT # mount again, it may be loop device) N+ |+ ]' j) Z- n9 h+ p: j
if [ $? -eq 0 -a "$(find_modules $LOOPMOUNT/$LIVECDNAME)" != "" ]; then/ x& f5 d! W. I
echolog "found in $DATAFROM"
, n) x7 u& i! P6 x: G DATA=$LOOPMOUNT/$LIVECDNAME
8 }% ?! G, o+ a else
+ B# N' p$ W e' \ fumount $LOOPMOUNT
, \; H. k0 j9 X5 h" T, U! T! t fumount $MOUNTDIR/*
! m6 {" D) N! `* q" C# t fi
, H% g' ~ W4 h fi
1 Z4 r1 y9 G5 m3 b5 }, }0 ^fi# x; F: a* T; y' ^% C; b4 b
FROMISO=$(cmdline_value fromiso)3 }8 t+ S% p, w( _% ?1 [
if [ "$FROMISO" ]; then
% T' O& ~$ C+ {( J' E. [9 O* j if [ "$DATA" = "" ]; then
$ \! a. B4 y# t/ }7 x; A& t! d FROMISO=$( find_in_computer /$FROMISO )0 R/ m1 I9 I4 }3 O
echolog "found file on $FROMISO "
$ }" F% u8 d# u if [ "$FROMISO" ];then
. l; R, `) w. L' L5 Y* C) z1 @# J* S mount_device $FROMISO $LOOPMOUNT iso9660) S- R) O% d" ]9 i1 M
if [ $? -eq 0 -a "$(find_modules $LOOPMOUNT/$LIVECDNAME)" != "" ]; then" h/ Q" e" f2 r8 b
echolog "found $LIVECDNAME in $FROMISO") [" e7 }# C7 I/ M/ i. |
DATA=$LOOPMOUNT/$LIVECDNAME; P; i+ x* v3 h# K: U
else$ V, y- [3 Z" e! R- l
fumount $LOOPMOUNT
" ^" `6 t6 ^( W0 ]% k9 P8 D7 Q fumount $MOUNTDIR/*' N! I! ~; W; s( I" N2 h* p
echolog "not found $LOOPMOUNT/$LIVECDNAME " i/ f* q3 v. F' v/ k; F
fi6 Q/ a/ Y2 [8 A2 d/ E# c
fi: h5 m0 q- e4 Z/ Z
fi
+ X& i% V. C7 Ofi- R2 I; }% O' Z+ R! `
! E/ `0 }5 c3 B# E4 J% s/ S( n5 VFROMISO=$(cmdline_value isofile)+ _4 `: s& y5 f# O
if [ "$DATA" = "" ]; then/ s4 ]0 i4 a# U+ b. _* [) D
if [ "$FROMISO" ]; then
6 E( S' {3 Y$ T6 Z/ j& ~ LOOPDEV=$(mknod_next_loop_dev)
* V/ X2 y" ?+ B2 r# N/ m1 ] for hdindex in sda5 hda5 sda1 hda1$ ~$ K$ t1 ` p% ?
do. r/ M# d e5 Z: }$ K) b; W J
hddev="/dev/$hdindex"2 L' D% z2 k$ b' _( m. q
hdmnt="/mnt/$hdindex"5 w: v; ?' [! ]; h; U% i
mount_device $hddev $hdmnt 2>/dev/null
- D; O# h- a8 [$ w+ f, X. B echolog "losetup $LOOPDEV $hdmnt/$FROMISO ........................"
1 U, {; ]* d) ~( @* d6 ^2 k+ }9 C losetup $LOOPDEV "$hdmnt/$FROMISO" 2>/dev/null( r5 }+ L4 f7 g! @
if [ $? -eq 0 ]; then m4 V( k$ Y; h8 D$ J5 i3 _, ^, Y+ ?
break+ B8 Q* _6 `) U! _
else& m% T% K3 w, M$ Q& J7 J1 h
fumount $hdmnt: I" i. G% t2 c$ F. y9 V% W, T
fi Q$ B. D2 j1 q' i1 Y# r& _/ ~
done" c( q* a( U: G
if [ $? -eq 0 ] ;then* h I' M0 Z" J4 v2 o- {
mkdir -p $LOOPMOUNT# N6 p) [0 w$ N0 W& P5 l, g
mount -r -t iso9660 $LOOPDEV $LOOPMOUNT 2>/dev/null. v1 A5 t4 n0 z& r
fi8 j6 ^* O! e! h- [; p. A! o
if [ $? -eq 0 ]; then
, j6 e. E# J) A6 ^0 [ DATA=$LOOPMOUNT/$LIVECDNAME
. s, o/ A, I$ B V echolog "mounted on $DATA ..................................."
' B8 c* w9 R8 O1 @4 L else- u& q" @) k1 e1 z) W" O4 g0 Q
echolog "mount error........................................."9 b2 }& x6 h) D8 T
fi
2 ?2 d/ y2 v, u d fi
5 G9 a: W( t5 B- Vfi
: L2 @+ b# ]+ C. D' G |
|