linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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:

  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).