LINUX.ORG.RU

форматирование корневого раздела

 , ,


1

2

Здравствуйте!

Есть задача отформатировать раздел с текущей системой, а после развернуть там новую rootfs. Сначала я выгружаю текущую систему в оперативную память, а посте пытаюсь форматировать мой раздел, но он занят по причине:

@svt /$ mkfs.ext3 /dev/mmcblk0p1 
mke2fs 1.41.4 (27-Jan-2009)
/dev/mmcblk0p1 is apparently in use by the system; will not make a filesystem here!
Я могу его примонтировать, но директории(dev,tmp ...) на нем не удается, т.к. они примонтированы до chroot.

Вот скрипт, кот перемещает в ОЗУ:

# Script to copy / to tmpfs and continue boot from there
# Do not run this from a child shell. Use ". ramify" or exec.
# The shell running this script must be the only process on the system.
#
# Ensure this runs in /
cd /
# Create and mount tmpfs file system for /
mount -t tmpfs tmpfs mnt
# Copy everything from / filesystem to tmpfs
# Tar will restore proper owners and permissions when run as root
# FIXME: This is very slow because it reads / in many small pieces
# TODO: Add --exclude to prevent copying unneeded stuff
tar --one-file-system -c . | tar -C /mnt -x
# Move other mounts
mount --move dev mnt/dev
mount --move proc mnt/proc
mount --move run mnt/run
mount --move sys mnt/sys
# Create fstab with just new root file system
sed -i '/^[^#]/d;' mnt/etc/fstab
echo 'tmpfs / tmpfs defaults 0 0' >> mnt/etc/fstab
# Pivot root using instructions from pivot_root(8) man page
cd mnt
mkdir old_root
pivot_root . old_root
# Old root can only be unmounted once sh running from old root
# finishes. Continue startup normally using init.
exec chroot . bin/sh -c "umount old_root ; exec sbin/init"

Перемещено leave из development

#!/bin/bash
mount -nt tmpfs / mnt
tar cp --no-seek --acls --selinux --xattrs .|tar --acls --selinux --xattrs -pxC mnt
cd mnt
sed -i -r 's/^\S+\s+\/\s+.*/\/ \/ tmpfs defaults 0 0/' etc/fstab
umount /dev /sys /proc
mount -nt proc -o nodev,noexec,nosuid proc proc
mount -nt sysfs -o nodev,noexec,nosuid sys sys
mount -nt devtmpfs -o exec,nosuid,mode=0755,size=10M udev dev
pivot_root . mnt
cd /
exec chroot . /bin/bash -c "umount /mnt;exec init"


вот так должно работать

teod0r ★★★★★ ()
Последнее исправление: teod0r (всего исправлений: 1)
Ответ на: комментарий от teod0r

и в начале тоже должно быть cd /
это должно быть запущено ядром как init=
возможно, в конце должно быть exec /sbin/init"

teod0r ★★★★★ ()
Последнее исправление: teod0r (всего исправлений: 1)
Ответ на: комментарий от Ya-NET

как у тебя может быть приглашение, если этот скрипт нужно запускать через параметр ядра init=?

teod0r ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.