blob: e7938e011a612d40ea35613e0b6c546a4c88ca71 (
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
|
#!/bin/sh
#set -e
copy_live_to ()
{
copyfrom="${1}"
copytodev="${2}"
copyto="${copyfrom}_swap"
if [ -z "${MODULETORAM}" ]
then
size=$(fs_size "" ${copyfrom}/ "used")
else
MODULETORAMFILE="${copyfrom}/${LIVE_MEDIA_PATH}/${MODULETORAM}"
if [ -f "${MODULETORAMFILE}" ]
then
size=$( expr $(ls -la ${MODULETORAMFILE} | awk '{print $5}') / 1024 + 5000 )
else
log_warning_msg "Error: toram-module ${MODULETORAM} (${MODULETORAMFILE}) could not be read."
return 1
fi
fi
if [ "${copytodev}" = "ram" ]
then
# copying to ram:
freespace=$(awk '/^MemFree:/{f=$2} /^Cached:/{c=$2} END{print f+c}' /proc/meminfo)
mount_options="-o size=${size}k"
free_string="memory"
fstype="tmpfs"
dev="/dev/shm"
else
# it should be a writable block device
if [ -b "${copytodev}" ]
then
dev="${copytodev}"
free_string="space"
fstype=$(get_fstype "${dev}")
freespace=$(fs_size "${dev}")
else
log_warning_msg "${copytodev} is not a block device."
return 1
fi
fi
if [ "${freespace}" -lt "${size}" ]
then
log_warning_msg "Not enough free ${free_string} (${freespace}k free, ${size}k needed) to copy live media in ${copytodev}."
return 1
fi
# Custom ramdisk size
if [ -z "${mount_options}" ] && [ -n "${ramdisk_size}" ]
then
# FIXME: should check for wrong values
mount_options="-o size=${ramdisk_size}"
fi
# begin copying (or uncompressing)
mkdir "${copyto}"
log_begin_msg "mount -t ${fstype} ${mount_options} ${dev} ${copyto}"
mount -t "${fstype}" ${mount_options} "${dev}" "${copyto}"
if [ "${extension}" = "tgz" ]
then
cd "${copyto}"
tar zxf "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
rm -f "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
mount -r -o move "${copyto}" "${rootmnt}"
cd "${OLDPWD}"
else
if [ -n "${MODULETORAMFILE}" ]
then
if [ -x /bin/rsync ]
then
echo " * Copying $MODULETORAMFILE to RAM" 1>/dev/console
rsync -a --progress ${MODULETORAMFILE} ${copyto} 1>/dev/console # copy only the filesystem module
else
cp ${MODULETORAMFILE} ${copyto} # copy only the filesystem module
fi
else
if [ -x /bin/rsync ]
then
echo " * Copying whole medium to RAM" 1>/dev/console
rsync -a --progress ${copyfrom}/* ${copyto} 1>/dev/console # "cp -a" from busybox also copies hidden files
else
mkdir -p ${copyto}/${LIVE_MEDIA_PATH}
cp -a ${copyfrom}/${LIVE_MEDIA_PATH}/* ${copyto}/${LIVE_MEDIA_PATH}
if [ -e ${copyfrom}/${LIVE_MEDIA_PATH}/.disk ]
then
cp -a ${copyfrom}/${LIVE_MEDIA_PATH}/.disk ${copyto}
fi
fi
fi
umount ${copyfrom}
mount -r -o move ${copyto} ${copyfrom}
fi
rmdir ${copyto}
return 0
}
|