blob: 5a5d74d858ebf927f8d437f7cb9d927ef2ea6699 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
#!/bin/sh
usage="Usage: $0 disk1|disk2"
# Set target disk
if [ $# -gt 1 ] ; then
echo $usage
exit 1
fi
if [ $# -eq 1 ] ; then
if [ "$1" = "disk1" ] ; then
targ=/share/hdd/data
copy=true
flag=.sda1root
elif [ "$1" = "disk2" ] ; then
targ=/share/flash/data
copy=true
flag=.sdb1root
elif [ "$1" = "hdd-data" ] ; then
targ=/share/hdd/data
copy=true
flag=.sda1root
elif [ "$1" = "hdd-conf" ] ; then
targ=/share/hdd/conf
copy=true
flag=.sda2root
elif [ "$1" = "flash-data" ] ; then
targ=/share/flash/data
copy=true
flag=.sdb1root
elif [ "$1" = "flash-conf" ] ; then
targ=/share/flash/conf
copy=true
flag=.sdb2root
elif [ "$1" = "jffs2-hdd-data" ] ; then
targ=/share/hdd/data
copy=
elif [ "$1" = "jffs2-hdd-conf" ] ; then
targ=/share/hdd/conf
copy=
elif [ "$1" = "jffs2-flash-data" ] ; then
targ=/share/flash/data
copy=
elif [ "$1" = "jffs2-flash-conf" ] ; then
targ=/share/flash/conf
copy=
else
echo $usage
exit 1
fi
else
echo $usage
exit 1
fi
# Check it's a real mount point
if grep $targ /proc/mounts >/dev/null 2>&1 ; then
echo "Target disk is $targ"
else
echo "Error: $targ is not a mounted disk"
exit 1
fi
# Start at the root directory
cd /
if [ -z "$copy" ] ; then
# Ensure /opt is there.
if [ ! -d $targ/opt ] ; then
echo "Creating new /opt directory on target disk."
mkdir -p $targ/opt
else
echo "Preserving existing /opt directory on target disk."
fi
if [ -d /opt -a ! -h /opt ] ; then
echo "Copying existing /opt directory from root disk to target disk."
tar cf - opt | ( cd $targ ; tar xf - )
mv /opt /opt.old
fi
echo "Linking /opt directory from target disk to root disk."
rm -f /opt ; ln -s $targ/opt /opt
# Ensure /usr/lib/ipkg is there.
if [ ! -d $targ/usr/lib/ipkg ] ; then
echo "Creating new /usr/lib/ipkg directory on target disk."
mkdir -p $targ/usr/lib/ipkg
fi
if [ ! -f $targ/usr/lib/ipkg/status -a -d /usr/lib/ipkg -a ! -h /usr/lib/ipkg ] ; then
echo "Copying existing /usr/lib/ipkg directory from root disk to target disk."
tar cf - usr/lib/ipkg | ( cd $targ ; tar xf - )
else
echo "Preserving existing ipkg database on target disk."
fi
if [ -d /usr/lib/ipkg -a ! -h /usr/lib/ipkg ] ; then
echo "Saving /usr/lib/ipkg directory on root disk in /usr/lib/ipkg.old"
rm -rf /usr/lib/ipkg.old
mv /usr/lib/ipkg /usr/lib/ipkg.old
fi
echo "Linking /usr/lib/ipkg directory from target disk to root disk."
rm -f /usr/lib/ipkg ; ln -s $targ/usr/lib/ipkg /usr/lib/ipkg
else
# Save the existing ipkg database.
rm -rf $targ/usr/lib/ipkg.old
if [ -f $targ/usr/lib/ipkg/status ] ; then
mv $targ/usr/lib/ipkg $targ/usr/lib/ipkg.old
fi
# Copy the complete rootfs to the target.
echo "Copying the complete rootfs from / to $targ."
/usr/bin/find / -print0 -mount | /usr/bin/cpio -p -0 -d -m -u $targ
rm -rf $targ/dev ; mv $targ/dev.state $targ/dev
rm -rf $targ/var ; mv $targ/var.state $targ/var
# Copy over the existing ipkg database.
if [ -f $targ/usr/lib/ipkg.old/status ] ; then
echo "Preserving existing ipkg database on target disk."
( cd $targ/usr/lib/ipkg.old ; tar cf - . ) | ( cd $targ/usr/lib/ipkg ; tar xf - )
fi
# Create the boot flag file.
rm -f /.sd??root $targ/.sd??root
echo "Creating /$flag to direct switchbox to boot from $targ."
echo > /$flag
echo > $targ/$flag
fi
exit 0
|