From owner-freebsd-bugs@FreeBSD.ORG Tue Mar 1 22:50:16 2005 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 237EA16A4CF for ; Tue, 1 Mar 2005 22:50:16 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9975043D41 for ; Tue, 1 Mar 2005 22:50:15 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.1/8.13.1) with ESMTP id j21MoFtH017033 for ; Tue, 1 Mar 2005 22:50:15 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.1/8.13.1/Submit) id j21MoFM3017032; Tue, 1 Mar 2005 22:50:15 GMT (envelope-from gnats) Resent-Date: Tue, 1 Mar 2005 22:50:15 GMT Resent-Message-Id: <200503012250.j21MoFM3017032@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, "Wojciech A. Koszek" Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 93A0316A4CE for ; Tue, 1 Mar 2005 22:42:53 +0000 (GMT) Received: from freebsd.czest.pl (silver.iplus.pl [80.48.250.4]) by mx1.FreeBSD.org (Postfix) with ESMTP id 15DE143D54 for ; Tue, 1 Mar 2005 22:42:52 +0000 (GMT) (envelope-from dunstan@freebsd.czest.pl) Received: from freebsd.czest.pl (freebsd.czest.pl [80.48.250.4]) by freebsd.czest.pl (8.12.10/8.12.9) with ESMTP id j21Mmm9r035990 for ; Tue, 1 Mar 2005 22:48:48 GMT (envelope-from dunstan@freebsd.czest.pl) Received: (from dunstan@localhost) by freebsd.czest.pl (8.12.10/8.12.9/Submit) id j21MmlLG035989; Tue, 1 Mar 2005 22:48:47 GMT (envelope-from dunstan) Message-Id: <200503012248.j21MmlLG035989@freebsd.czest.pl> Date: Tue, 1 Mar 2005 22:48:47 GMT From: "Wojciech A. Koszek" To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: conf/78257: [PATCH] /etc/rc.d/memdisk for /dev/md* creation at startup X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: "Wojciech A. Koszek" List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Mar 2005 22:50:16 -0000 >Number: 78257 >Category: conf >Synopsis: [PATCH] /etc/rc.d/memdisk for /dev/md* creation at startup >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Mar 01 22:50:15 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Wojciech A. Koszek >Release: FreeBSD 5.4-PRERELEASE i386 >Organization: >Environment: System: FreeBSD dunstan.freebsd.czest.pl 5.4-PRERELEASE FreeBSD 5.4-PRERELEASE #10: Sat Feb 26 23:44:07 CET 2005 dunstan@dunstan.freebsd.czest.pl:/usr/obj/usr/src/sys/HOME7 i386 >Description: Currently, there is no way to create memory disks on system startup, and there is no way to attach/detach large number of such disks at once. I wanted to have easy way to automatically attach images in order to mount them from /etc/fstab. I've created simple script designed to fit in /etc/rc.d. Idea is similar to /etc/rc.d/ramdisk but without previous filesystem creation. You may enable it's functionality by setting memdisk_enable to "YES" in /etc/rc.conf. Each disk is configured by variables: memdisk__type="TYPE" where TYPE may be either "malloc", "swap" or "vnode". For "swap" or "malloc" memory disk you have to set: memdisk__size="SIZE" where SIZE is just like this value used in mdconfig(8). For "vnode" type you have to set: memdisk__file="PATH" where match is full path to file which you'd like to attach as disk. may me typical name of memory disk device: "md0", "md1", ... , "mdN". Disks configured with these variables has to be enabled with: memdisk_list="LIST" where LIST is string containing memory disk names separated with white spaces. Disk specific options used by mdconfig(8) can be passed with: memdisk__flags="FLAGS" where FLAGS is string contating options passed to mdconfig(8). Additionally, it's possible to set diffrent interface than /dev/mdctl (memdisk_device) option). Sample working configuration may look like: [rc.conf] [..] memdisk_enable="YES" memdisk_list="0 1 2" memdisk_0_type="malloc" memdisk_0_size="1m" memdisk_0_flags="-s 1024" memdisk_1_type="vnode" memdisk_1_file="/tmp/f/etc.iso" memdisk_2_type="swap" memdisk_2_size="10m" [..] I hope you'll find it useful. >How-To-Repeat: >Fix: Patch [diff.memdisk]: adds: src/etc/rc.d/memdisk modifies: src/etc/rc.d/Makefile src/etc/defaults/rc.conf src/share/man/man5/rc.conf.5 --- diff.memdisk begins here --- Patch against FreeBSD 5.4-PRERELEASE, kern.osreldate: 503102. diff -uprP /usr/src/etc/defaults/rc.conf src/etc/defaults/rc.conf --- /usr/src/etc/defaults/rc.conf Sun Feb 27 11:07:11 2005 +++ src/etc/defaults/rc.conf Tue Mar 1 22:54:11 2005 @@ -477,6 +477,13 @@ ugidfw_enable="NO" # Load mac_bsdextende bsdextended_script="/etc/rc.bsdextended" # Default mac_bsdextended(4) # ruleset file. + +############################################################## +### /dev/md* configuration ################################## +############################################################## +memdisk_enable="NO" +memdisk_device="/dev/mdctl" + ############################################################## ### Jail Configuration ####################################### ############################################################## diff -uprP /usr/src/etc/rc.d/Makefile src/etc/rc.d/Makefile --- /usr/src/etc/rc.d/Makefile Sat Oct 30 19:03:33 2004 +++ src/etc/rc.d/Makefile Tue Mar 1 22:43:14 2005 @@ -19,7 +19,7 @@ FILES= DAEMON LOGIN NETWORKING SERVERS \ jail \ kadmind kerberos keyserv kldxref kpasswdd \ ldconfig local localpkg lomac lpd \ - mixer motd mountcritlocal mountcritremote \ + mixer motd memdisk mountcritlocal mountcritremote \ mountd moused mroute6d mrouted msgs \ named natd netif netoptions \ network_ipv6 nfsclient nfsd \ diff -uprP /usr/src/etc/rc.d/memdisk src/etc/rc.d/memdisk --- /usr/src/etc/rc.d/memdisk Thu Jan 1 01:00:00 1970 +++ src/etc/rc.d/memdisk Tue Mar 1 22:58:16 2005 @@ -0,0 +1,102 @@ +#!/bin/sh +# +# Copyright (c) 2005 Wojciech A. Koszek +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE PROJECT ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# PROVIDE: memdisk +# REQUIRE: root +# BEFORE: mountcritlocal +# KEYWORD: nojail + +. /etc/rc.subr +name="memdisk" +start_cmd="memdisk_start" +stop_cmd="memdisk_stop" + +# Do not rely on mdconfig(8) +memdisk_modpresent() +{ + if [ ! -e ${memdisk_device:-"/dev/mdctl"} ] + then + kldstat -v | grep -q g_md || kldload g_md; + fi +} + +# Create memory disk +memdisk_create() +{ + _mdev="$1" + + eval md_size=\"\$memdisk_${_mdev}_size\"; + eval md_file=\"\$memdisk_${_mdev}_file\"; + eval md_flags=\"\$memdisk_${_mdev}_flags\"; + eval md_type=\"\$memdisk_${_mdev}_type\"; + + case "${md_type}" in + [Mm][Aa][Ll][Ll][Oo][Cc]) + md_type="malloc"; + _mdevopt="-s ${md_size}"; + ;; + [Ss][Ww][Aa][Pp]) + md_type="swap"; + _mdevopt="-s ${md_size}"; + ;; + [Vv][Nn][Oo][Dd][Ee]) + md_type="vnode"; + _mdevopt="-f ${md_file}"; + ;; + *) + echo "You must specify correct type of memory disk"; + return + esac + mdconfig -a -t ${md_type} ${_mdevopt} ${md_flags} -u ${_mdev} 2>&1; +} + +# Start +memdisk_start() +{ + if checkyesno memdisk_enable; then + memdisk_modpresent; + echo -n "Configuring memory devices: "; + for _mdev in ${memdisk_list}; do + memdisk_create "$_mdev" && echo -n "md${_mdev} " + done + echo; + fi +} + +# Destroy created devices +memdisk_stop() +{ + if checkyesno memdisk_enable; then + echo -n "Deinitializing memory devices: "; + for _mdev in ${memdisk_list}; do + mdconfig -d -u "${_mdev}" && echo -n "md${_mdev} " 2>&1; + done; + echo; + fi +} + +load_rc_config $name +run_rc_command "$1" diff -uprP /usr/src/share/man/man5/rc.conf.5 src/share/man/man5/rc.conf.5 --- /usr/src/share/man/man5/rc.conf.5 Fri Feb 25 22:46:26 2005 +++ src/share/man/man5/rc.conf.5 Tue Mar 1 23:03:27 2005 @@ -3092,6 +3092,52 @@ The default ruleset file to load. The default value of this variable is .Pa /etc/rc.bsdextended . +.It Va memdisk_enable +.Pq Vt str +Responsible for creation memory disks on startup. +Set this to +.Dq Li YES +to enable this functionality. Default value is +.Dq Li NO . +.It memdisk_list +.Pq Vt str +A list of one or more memory disks you want to configure on +startup. +.It memdisk_ Ns Ao Ar X Ac Ns Va _type +.Pq Vt str +Type of memory disk passed with +.Fl t Ar type +option to +.Xr mdconfig 8 +for disk +.Ar X . +Value may be +.Ar malloc , +.Ar swap +or +.Ar vnode. +.It memdisk_ Ns Ao Ar X Ac Ns Va _size +.Pq Vt str +Size of memory disk +.Ar X , +when it's type set with +.Va memdisk_ Ns Ao Ar X Ac Ns Va _type +is either +.Ar malloc +or +.Ar swap . +.It memdisk_ Ns Ao Ar X Ac Ns Va _file +.Pq Vt str +Full path to file used as memory disk when type set with +.Va memdisk_ Ns Ao Ar X Ac Ns Va _type +is +.Ar vnode . +.It memdisk_ Ns Ao Ar X Ac Ns Va _flags +.Pq Vt str +Additional flags passed to +.Xr mdconfig 8 +while configuring memory disk +.Ar X . .It Va ramdisk_units .Pq Vt str A list of one or more ramdisk units to configure with --- diff.memdisk ends here --- >Release-Note: >Audit-Trail: >Unformatted: