From: Matt Parnell <mparnell@gmail.com>
To: Eric Sandeen <sandeen@redhat.com>
Cc: linux-ext4@vger.kernel.org
Subject: Re: Bug In ext4 in kernels > 2.6.39 - Not mounting with arguments/options I specify in fstab on root remount
Date: Sun, 9 Oct 2011 17:10:54 -0500 [thread overview]
Message-ID: <CABeR260PEDEF1cyX5JPs3VC0hpThmKNtDAhDd-sPDZ2grtL+=g@mail.gmail.com> (raw)
In-Reply-To: <4E6F6D89.5040905@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 3035 bytes --]
FYI this behavior still occurs with every revision up to the current
3.0.6 working tree. I do not think it's my distro's initscripts,
they've been rolling 3.0.X kernels for some time and those behave the
same way, so it's not some sort of parsing issues - Arch's initscripts
are all bash based for the most part anyway, see the attached from my
system - that's the entire boot initscript minus my daemons.
There's no alternative init system for Archlinux at this point, I'm
working on porting OpenRC from gentoo as I have time to write
initscripts from scratch, but that's a slow moving project.
Whatever the case, the following are from my most recent attempt with
a 3.0.6 build. Manually attempting to remount rw still fails, and no
matter whether I use /dev/sdb1 or /dev/root, I get the same behavior.
/proc/mounts (as you can see it's not being remounted rw for some
reason - /dev/sdc1 is the flash drive I used to pipe this info onto):
rootfs / rootfs rw 0 0
/dev/root / ext4 ro,relatime,barrier=1 0 0
devtmpfs /dev devtmpfs rw,relatime,size=4059824k,nr_inodes=1014956,mode=755 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
/sys /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
/run /run tmpfs rw,nosuid,nodev,relatime,size=10240k,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
shm /dev/shm tmpfs rw,nosuid,nodev,relatime 0 0
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
/dev/sda4 /media/disk ext3
rw,nosuid,nodev,noatime,nodiratime,errors=continue,barrier=0,data=writeback
0 0
/dev/sdc1 /mnt/tmp vfat
rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
0 0
/etc/mtab (not useful, I know, but for reference):
/dev/root / ext4
rw,noatime,nodiratime,data=writeback,barrier=0,discard,commit=0 0 0
devtmpfs /dev devtmpfs rw,relatime,size=4059656k,nr_inodes=1014914,mode=755 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
/sys /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
/run /run tmpfs rw,nosuid,nodev,relatime,size=10240k,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
shm /dev/shm tmpfs rw,nosuid,nodev,relatime 0 0
tmpfs /tmp tmpfs rw,nosuid,nodev 0 0
/etc/fstab:
#
# /etc/fstab: static file system information
#
devpts /dev/pts devpts defaults 0 0
shm /dev/shm tmpfs nodev,nosuid 0 0
/dev/sdb1 / ext4
defaults,noatime,nodiratime,data=writeback,barrier=0,discard 0 0
/dev/sda4 /media/disk ext3
defaults,data=writeback,noatime,nodiratime,user,exec 0 0
tmpfs /tmp tmpfs nodev,nosuid 0 0
>On 09/13/2011 09:49 AM, Eric Sandeen wrote:
>
>On 9/13/11 4:01 AM, Matt Parnell wrote:
>
>Interestingly, this also happened and worked, which I think is a bug,
>how can barrier=0 and 1 at the same time?
>
>EXT4-fs (sdb1): re-mounted. Opts: user_xattr,barrier=1,barrier=0
>
>Fairly certain that the parser will just take the last value specified
>for the option.
>
>/proc/mounts likely says "nobarrier" when you specify it this way?
>
>-Eric
[-- Attachment #2: rc.sysinit --]
[-- Type: application/octet-stream, Size: 8742 bytes --]
#!/bin/bash
#
# /etc/rc.sysinit
#
. /etc/rc.conf
. /etc/rc.d/functions
echo " "
printhl "Arch Linux\n"
printhl "${C_H2}http://www.archlinux.org"
printsep
# mount /proc, /sys, /run, /dev, /run/lock, /dev/pts, /dev/shm (the api filesystems)
mountpoint -q /proc || mount -n -t proc proc /proc -o nosuid,noexec,nodev
mountpoint -q /sys || mount -n -t sysfs sys /sys -o nosuid,noexec,nodev
mountpoint -q /run || mount -n -t tmpfs run /run -o mode=0755,size=10M,nosuid,nodev
mountpoint -q /dev || mount -n -t devtmpfs udev /dev -o mode=0755,size=10M,nosuid \
|| mount -n -t tmpfs udev /dev -o mode=0755,size=10M,nosuid
mkdir -p -m 1777 /run/lock
mkdir -p /dev/{pts,shm}
mountpoint -q /dev/pts || mount -n /dev/pts &>/dev/null \
|| mount -n -t devpts devpts /dev/pts -o mode=0620,gid=5,nosuid,noexec
mountpoint -q /dev/shm || mount -n /dev/shm &>/dev/null \
|| mount -n -t tmpfs shm /dev/shm -o mode=1777,nosuid,nodev
# remount root ro to allow for fsck later on, we remount now to
# make sure nothing can open files rw on root which would block a remount
findmnt / --options ro &>/dev/null ||
status "Mounting Root Read-Only" mount -n -o remount,ro /
run_hook sysinit_start
# start up our mini logger until syslog takes over
minilogd
bootlogd -p /run/bootlogd.pid
if [[ ! -a /usr/lib ]] ; then
printf "${C_FAIL}/usr is not mounted. This is not supported.${C_OTHER}\n"
fi
HWCLOCK_PARAMS="--systz"
case $HARDWARECLOCK in
"") ;;
UTC) HWCLOCK_PARAMS+=" --utc --noadjfile";;
localtime) HWCLOCK_PARAMS+=" --localtime --noadjfile";;
*) HWCLOCK_PARAMS="";;
esac
if [[ $HWCLOCK_PARAMS ]]; then
stat_busy "Adjusting system time and setting kernel timezone"
# enable rtc access
modprobe -q -a rtc-cmos rtc genrtc
# If devtmpfs is used, the required RTC device already exists now
# Otherwise, create whatever device is available
if ! [[ -c /dev/rtc || -c /dev/rtc0 ]]; then
for dev in /sys/class/rtc/rtc0/dev /sys/class/misc/rtc/dev; do
[[ -e $dev ]] || continue
IFS=: read -r major minor < "$dev"
mknod /dev/rtc c $major $minor
done
fi
# Adjust the system time for timezone offset if rtc is not in UTC
# 1. Make creation time on udev nodes sane (FS#8665)
# 2. Filesystem checks can depend on system time
# 3. This also sets the kernel time zone, used by e.g. vfat
# If TIMEZONE is not set in rc.conf, the timezone stored in /etc/localtime
# is used. If HARDWARECLOCK is not set in rc.conf, the value in
# /var/lib/hwclock/adjfile is used (in this case /var can not be a separate
# partition).
TZ=$TIMEZONE hwclock $HWCLOCK_PARAMS && stat_done || stat_fail
fi
# Start/trigger UDev, load MODULES and settle UDev
udevd_modprobe sysinit
# bring up the loopback interface
[[ -d /sys/class/net/lo ]] &&
status "Bringing up loopback interface" ip link set up dev lo
# FakeRAID devices detection
[[ $USEDMRAID = [Yy][Ee][Ss] && -x $(type -P dmraid) ]] &&
status "Activating FakeRAID arrays" dmraid -i -ay
# BTRFS devices detection
[[ $USEBTRFS = [Yy][Ee][Ss] && -x $(type -P btrfs) ]] &&
status "Activating BTRFS volumes" btrfs device scan
# Activate LVM2 groups if any
activate_vgs
# Set up non-root encrypted partition mappings
if [[ -f /etc/crypttab && $CS ]] && grep -q ^[^#] /etc/crypttab; then
stat_busy "Unlocking encrypted volumes:"
modprobe -q dm-crypt 2>/dev/null
do_unlock() {
# $1 = requested name
# $2 = source device
# $3 = password
# $4 = options
stat_append "${1}.."
local open=create a=$1 b=$2 failed=0
# Ordering of options is different if you are using LUKS vs. not.
# Use ugly swizzling to deal with it.
# isLuks only gives an exit code but no output to stdout or stderr.
if $CS isLuks "$2" 2>/dev/null; then
open=luksOpen
a=$2
b=$1
fi
case $3 in
SWAP)
local _overwriteokay=0
if [[ -b $2 && -r $2 ]]; then
# This is DANGEROUS! If there is any known file system,
# partition table, RAID or LVM volume on the device
# we don't overwrite it.
#
# 'blkid' returns 2 if no valid signature has been found.
# Only in this case we should allow overwriting the device.
#
# This sanity check _should_ be sufficient, but it might not.
# This may cause dataloss if it is not used carefully.
blkid -p "$2" &>/dev/null
(( $? == 2 )) && _overwriteokay=1
fi
if (( _overwriteokay == 0 )); then
false
elif $CS -d /dev/urandom $4 $open "$a" "$b" >/dev/null; then
stat_append "creating swapspace.."
mkswap -f -L $1 /dev/mapper/$1 >/dev/null
fi;;
ASK)
printf "\nOpening '$1' volume:\n"
$CS $4 $open "$a" "$b" < /dev/console;;
/dev*)
local ckdev=${3%%:*}
local cka=${3#*:}
local ckb=${cka#*:}
local cka=${cka%:*}
local ckfile=/dev/ckfile
local ckdir=/dev/ckdir
case ${cka} in
*[!0-9]*)
# Use a file on the device
# cka is not numeric: cka=filesystem, ckb=path
mkdir ${ckdir}
mount -r -t ${cka} ${ckdev} ${ckdir}
dd if=${ckdir}/${ckb} of=${ckfile} >/dev/null 2>&1
umount ${ckdir}
rmdir ${ckdir};;
*)
# Read raw data from the block device
# cka is numeric: cka=offset, ckb=length
dd if=${ckdev} of=${ckfile} bs=1 skip=${cka} count=${ckb} >/dev/null 2>&1;;
esac
$CS -d ${ckfile} $4 $open "$a" "$b" >/dev/null
dd if=/dev/urandom of=${ckfile} bs=1 count=$(stat -c %s ${ckfile}) conv=notrunc >/dev/null 2>&1
rm ${ckfile};;
/*)
$CS -d "$3" $4 $open "$a" "$b" >/dev/null;;
*)
echo "$3" | $CS $4 $open "$a" "$b" >/dev/null;;
esac
if (( $? )); then
failed=1
stat_append "failed "
else
stat_append "ok "
fi
return $failed
}
crypto_unlocked=0
read_crypttab do_unlock && stat_done || stat_fail
# Maybe someone has LVM on an encrypted block device
(( crypto_unlocked == 1 )) && activate_vgs
fi
# Check filesystems
[[ -f /forcefsck ]] || in_array forcefsck $(< /proc/cmdline) && FORCEFSCK="-- -f"
declare -r FORCEFSCK
run_hook sysinit_prefsck
if [[ -x $(type -P fsck) ]]; then
stat_busy "Checking Filesystems"
fsck_all >|"${FSCK_OUT:-/dev/stdout}" 2>|"${FSCK_ERR:-/dev/stdout}"
declare -r fsckret=$?
(( fsckret <= 1 )) && stat_done || stat_fail
else
declare -r fsckret=0
fi
run_hook sysinit_postfsck
# Single-user login and/or automatic reboot if needed
fsck_reboot $fsckret
status "Remounting Root Read/Write" \
mount -n -o remount,rw /
# don't touch /etc/mtab if it is a symlink to /proc/self/mounts
if [[ ! -L /etc/mtab ]]; then
stat_busy "Creating mtab"
if [[ -x $(type -P findmnt) && -e /proc/self/mountinfo ]]; then
findmnt -rnu -o SOURCE,TARGET,FSTYPE,OPTIONS >| /etc/mtab
else
cat /proc/mounts >| /etc/mtab
fi
(( $? == 0 )) && stat_done || stat_fail
fi
# now mount all the local filesystems
run_hook sysinit_premount
status "Mounting Local Filesystems" \
mount_all
run_hook sysinit_postmount
# enable monitoring of lvm2 groups, now that the filesystems are mounted rw
[[ $USELVM = [Yy][Ee][Ss] && -x $(type -P lvm) && -d /sys/block ]] &&
status "Activating monitoring of LVM2 groups" \
vgchange --monitor y >/dev/null
status "Activating Swap" swapon -a
[[ $TIMEZONE ]] && status "Configuring Time Zone" set_timezone "$TIMEZONE"
RANDOM_SEED=/var/lib/misc/random-seed
[[ -f $RANDOM_SEED ]] &&
status "Initializing Random Seed" \
cp $RANDOM_SEED /dev/urandom
# Remove leftover files
remove_leftover
if [[ $HOSTNAME ]]; then
stat_busy "Setting Hostname: $HOSTNAME"
echo "$HOSTNAME" >| /proc/sys/kernel/hostname && stat_done || stat_fail
fi
if [[ ${LOCALE,,} =~ utf ]]; then
stat_busy "Setting Consoles to UTF-8 mode"
# UTF-8 consoles are default since 2.6.24 kernel
# this code is needed not only for older kernels,
# but also when user has set vt.default_utf8=0 but LOCALE is *.UTF-8.
for i in /dev/tty[0-9]*; do
kbd_mode -u < ${i}
printf "\e%%G" > ${i}
done
echo 1 >| /sys/module/vt/parameters/default_utf8
stat_done
else
stat_busy "Setting Consoles to legacy mode"
# make non-UTF-8 consoles work on 2.6.24 and newer kernels
for i in /dev/tty[0-9]*; do
kbd_mode -a < ${i}
printf "\e%%@" > ${i}
done
echo 0 >| /sys/module/vt/parameters/default_utf8
stat_done
fi
[[ $KEYMAP ]] &&
status "Loading Keyboard Map: $KEYMAP" loadkeys -q $KEYMAP
# Set console font if required
set_consolefont
stat_busy "Saving dmesg Log"
if [[ -e /proc/sys/kernel/dmesg_restrict ]] &&
(( $(< /proc/sys/kernel/dmesg_restrict) == 1 )); then
install -Tm 0600 <( dmesg ) /var/log/dmesg.log
else
install -Tm 0644 <( dmesg ) /var/log/dmesg.log
fi
(( $? == 0 )) && stat_done || stat_fail
run_hook sysinit_end
# End of file
# vim: set ts=2 sw=2 noet:
next prev parent reply other threads:[~2011-10-09 22:10 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4E6F1B49.3010803@gmail.com>
2011-09-13 9:01 ` Bug In ext4 in kernels > 2.6.39 - Not mounting with arguments/options I specify in fstab on root remount Matt Parnell
2011-09-13 10:25 ` Christian Kujau
[not found] ` <CABeR261eWW1vi1Xk9E6SWdy7PN=oiDbQdT_LiHgZf7+6V7Sv8Q@mail.gmail.com>
2011-09-13 10:48 ` Christian Kujau
2011-09-13 14:49 ` Eric Sandeen
2011-10-09 22:10 ` Matt Parnell [this message]
2011-10-09 23:44 ` Ted Ts'o
2011-10-21 3:29 ` Matt Parnell
2011-10-21 4:29 ` Matt Parnell
2011-10-22 5:00 ` Ted Ts'o
2011-10-22 7:51 ` Matt Parnell
2011-10-22 7:53 ` Matt Parnell
2011-10-22 9:32 ` Ted Ts'o
2011-11-07 2:18 ` Matt Parnell
2011-11-07 2:24 ` Matt Parnell
2011-11-07 5:26 ` Matt Parnell
2011-11-07 5:32 ` Matt Parnell
2011-11-07 15:47 ` Ted Ts'o
2011-11-08 1:48 ` Matt Parnell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CABeR260PEDEF1cyX5JPs3VC0hpThmKNtDAhDd-sPDZ2grtL+=g@mail.gmail.com' \
--to=mparnell@gmail.com \
--cc=linux-ext4@vger.kernel.org \
--cc=sandeen@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).