Imported reiserfsprogs-3.6.21

This commit is contained in:
Jeff Mahoney committed 2012-10-11 11:32:39 -04:00
1 parent dac518d099
commit 149a82e2e9
193 files changed
+32708 -44216

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
sbin_PROGRAMS = reiserfstune
reiserfstune_SOURCES = tune.c tune.h
man_MANS = reiserfstune.8
EXTRA_DIST = $(man_MANS)
LDADD = $(top_srcdir)/reiserfscore/libcore.a $(top_srcdir)/lib/libmisc.a
+477
View File
@@ -0,0 +1,477 @@
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
sbin_PROGRAMS = reiserfstune$(EXEEXT)
subdir = tune
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/include/config.h
CONFIG_CLEAN_FILES =
am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"
sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(sbin_PROGRAMS)
am_reiserfstune_OBJECTS = tune.$(OBJEXT)
reiserfstune_OBJECTS = $(am_reiserfstune_OBJECTS)
reiserfstune_LDADD = $(LDADD)
reiserfstune_DEPENDENCIES = $(top_srcdir)/reiserfscore/libcore.a \
$(top_srcdir)/lib/libmisc.a
DEFAULT_INCLUDES = -I. -I$(top_builddir)/include@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(reiserfstune_SOURCES)
DIST_SOURCES = $(reiserfstune_SOURCES)
man8dir = $(mandir)/man8
NROFF = nroff
MANS = $(man_MANS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
UUID_LIBS = @UUID_LIBS@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
reiserfstune_SOURCES = tune.c tune.h
man_MANS = reiserfstune.8
EXTRA_DIST = $(man_MANS)
LDADD = $(top_srcdir)/reiserfscore/libcore.a $(top_srcdir)/lib/libmisc.a
all: all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tune/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu tune/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-sbinPROGRAMS: $(sbin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
@list='$(sbin_PROGRAMS)'; for p in $$list; do \
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
if test -f $$p \
; then \
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
$(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
else :; fi; \
done
uninstall-sbinPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(sbin_PROGRAMS)'; for p in $$list; do \
f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
rm -f "$(DESTDIR)$(sbindir)/$$f"; \
done
clean-sbinPROGRAMS:
-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
reiserfstune$(EXEEXT): $(reiserfstune_OBJECTS) $(reiserfstune_DEPENDENCIES)
@rm -f reiserfstune$(EXEEXT)
$(LINK) $(reiserfstune_OBJECTS) $(reiserfstune_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tune.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
install-man8: $(man8_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.8*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
8*) ;; \
*) ext='8' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
done
uninstall-man8:
@$(NORMAL_UNINSTALL)
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.8*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
8*) ;; \
*) ext='8' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS) $(MANS)
installdirs:
for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am: install-man
install-dvi: install-dvi-am
install-exec-am: install-sbinPROGRAMS
install-html: install-html-am
install-info: install-info-am
install-man: install-man8
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-man uninstall-sbinPROGRAMS
uninstall-man: uninstall-man8
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-sbinPROGRAMS ctags distclean distclean-compile \
distclean-generic distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-man8 install-pdf \
install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-man uninstall-man8 \
uninstall-sbinPROGRAMS
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
+238
View File
@@ -0,0 +1,238 @@
.\" -*- nroff -*-
.\" Copyright 1996-2004 Hans Reiser.
.\"
.TH REISERFSTUNE 8 "January 2009" "Reiserfsprogs-3.6.21"
.SH NAME
reiserfstune \- The tunning tool for the ReiserFS filesystem.
.SH SYNOPSIS
.B reiserfstune
[ \fB-f\fR ]
[ \fB-h\fR | \fB--help\fR ]
[ \fB-j\fR | \fB--journal-device\fR \fIFILE\fR ]
[ \fB--no-journal-available\fR ]
[ \fB--journal-new-device\fR \fIFILE\fR ] [ \fB--make-journal-standard\fR ]
[ \fB-s\fR | \fB--journal-new-size\fR \fIN\fR ]
[ \fB-o\fR | \fB--journal-new-offset\fR \fIN\fR ]
[ \fB-t\fR | \fB--max-transaction-size\fR \fIN\fR ]
[ \fB-b\fR | \fB--add-badblocks\fR \fIfile\fR ]
[ \fB-B\fR | \fB--badblocks\fR \fIfile\fR ]
[ \fB-u\fR | \fB--uuid \fIUUID\fR ]
[ \fB-l\fR | \fB--label \fILABEL\fR ]
[ \fB-c\fR | \fB--check-interval \fIinterval-in-days\fR ]
[ \fB-C\fR | \fB--time-last-checked \fItimestamp\fR ]
[ \fB-m\fR | \fB--max-mnt-count \fIcount\fR ]
[ \fB-M\fR | \fB--mnt-count \fIcount\fR ]
.I device
.SH DESCRIPTION
\fBreiserfstune\fR is used for tuning the ReiserFS. It can change two journal
parameters (the journal size and the maximum transaction size), and it can move
the journal's location to a new specified block device. (The old ReiserFS's
journal may be kept unused, or discarded at the user's option.) Besides that
\fBreiserfstune\fR can store the bad block list to the ReiserFS and set UUID
and LABEL.
Note: At the time of writing the relocated journal was implemented for a special
release of ReiserFS, and was not expected to be put into the mainstream kernel
until approximately Linux 2.5. This means that if you have the stock kernel you
must apply a special patch. Without this patch the kernel will refuse to mount
the newly modified file system. We will charge $25 to explain this to you if
you ask us why it doesn't work.
.PP
Perhaps the most interesting application of this code is to put the
journal on a solid state disk.
.TP
\fIdevice
is the special file corresponding to the newly specified block device (e.g
/dev/hdXX for IDE disk partition or /dev/sdXX for the SCSI disk partition).
.SH OPTIONS
.TP
\fB-h\fR | \fB--help\fR
Print usage information and exit.
.TP
\fB-j\fR | \fB--journal-device\fR \fIFILE
\fIFILE\fR is the file name of the block device the file system has
the current journal (the one prior to running reiserfstune) on. This option is required when the journal is
already on a separate device from the main data device (although it
can be avoided with \fB--no-journal-available\fR). If you don't
specify journal device by this option, reiserfstune suppose that
journal is on main device.
.TP
\fB--no-journal-available
allows \fBreiserfstune\fR to continue when the current journal's block
device is no longer available. This might happen if a disk goes bad
and you remove it (and run fsck).
.TP
\fB--journal-new-device \fIFILE
\fIFILE\fR is the file name of the block device which will contain the
new journal for the file system. If you don't specify this,
reiserfstune supposes that journal device remains the same.
.TP
\fB \-s\fR | \fB\--journal-new-size \fIN
\fIN\fR is the size parameter for the new journal. When journal is to
be on a separate device - its size defaults to number of blocks that
device has. When journal is to be on the same device as the filesytem - its size defaults
to amount of blocks allocated for journal by \fImkreiserfs\fR when it
created the filesystem. Minimum is 513 for
both cases.
.TP
\fB \-o\fR | \fB\--journal-new-offset \fIN
\fIN\fR is an offset in blocks where journal will starts from when journal is to
be on a separate device. Default is 0. Has no effect when journal is
to be on the same device as the filesystem. Most users have no need
to use this feature. It can be used when you want the journals from
multiple filesystems to reside on the same device, and you don't want
to or cannot partition that device.
.TP
\fB \-t\fR | \fB\--maximal-transaction-size \fIN
\fIN\fR is the maximum transaction size parameter for the new
journal. The default, and max possible, value is 1024 blocks. It
should be less than half the size of the journal. If specifed
incorrectly, it will be adjusted.
.TP
\fB \-b\fR | \fB\--add-badblocks\fR \fIfile\fR
\fIFile\fR is the file name of the file that contains the list of blocks to be marked
as bad on the fs. The list is added to the fs list of bad blocks.
.TP
\fB \-B\fR | \fB\--badblocks\fR \fIfile\fR
\fIFile\fR is the file name of the file that contains the list of blocks to be marked
as bad on the fs. The bad block list on the fs is cleared before the list specified
in the \fIFile\fR is added to the fs.
.TP
\fB\-f\fR | \fB--force\fR
Normally \fBreiserfstune\fR will refuse to change a journal of a
file system that was created before this journal relocation code. This
is because if you change the journal, you cannot go back (without special
option \fB--make-journal-standard\fR) to an old kernel that lacks this feature and be able to use your filesytem. This option forces it to do that. Specified more
than once it allows to avoid asking for confirmation.
.TP
\fB--make-journal-standard\fR
As it was mentioned above, if your file system has non-standard journal,
it can not be mounted on the kernel without journal relocation
code. The thing can be changed, the only condition is that there is reserved
area on main device of the standard journal size 8193 blocks (it will be so for
instance if you convert standard journal to non-standard). Just
specify this option when you relocate journal back, or without relocation
if you already have it on main device.
.TP
\fB-u\fR | \fB--uuid \fIUUID\fR
Set the universally unique identifier (\fB UUID \fR) of the filesystem to
\fIUUID\fR (see also \fBuuidgen(8)\fR). The format of the UUID is a
series of hex digits separated by hypthens, like this:
"c1b9d5a2-f162-11cf-9ece-0020afc76f16".
.TP
\fB-l\fR | \fB--label \fILABEL\fR
Set the volume label of the filesystem. \fILABEL\fR can be at most 16
characters long; if it is longer than 16 characters, reiserfstune will truncate it.
.TP
\fB-c\fR | \fB--check-interval \fIinterval-in-days\fR
Adjust the maximal time between two filesystem checks. A value of "disable"
will disable the time-dependent checking. A value of "default" will restore
the compile-time default.
It is strongly recommended that either
.B \-m
(mount-count dependent) or
.B \-c
(time-dependent) checking be enabled to force periodic full
.BR fsck.reiserfs(8)
checking of the filesystem. Failure to do so may lead to
filesystem corruption (due to bad disks, cables, memory, or kernel bugs)
going unnoticed, ultimately resulting in data loss or corruption.
.TP
\fB-C\fR | \fB--time-last-checked \fItimestamp\fR
Set the time the filesystem was last checked using fsck.reiserfs. This
can be useful in scripts which use a Logical Volume Manager to make a
consistent snapshot of a filesystem, and then check the filesystem during
off hours to make sure it hasn't been corrupted due to hardware problems,
etc. If the filesystem was clean, then this option can be used to set the
last checked time on the original filesystem. The format of time-last-checked
is the international date format, with an optional time specifier, i.e.
YYYYMMDD[HH[MM[SS]]]. The keyword
.B now
is also accepted, in which case the
last checked time will be set to the current time.
.TP
\fB-m\fR | \fB--max-mnt-count \fImax-mount-count\fR
Adjust the number of mounts after which the filesystem will be
checked by
.BR fsck.reiserfs(8).
If max-mount-count is "disable", the number of times the filesystem
is mounted will be disregarded by
.BR fsck.reiserfs(8)
and the kernel. A value of "default" will restore the compile-time default.
Staggering the mount-counts at which filesystems are forcibly
checked will avoid all filesystems being checked at one time
when using journaled filesystems.
You should strongly consider the consequences of disabling
mount-count-dependent checking entirely. Bad disk drives,
cables, memory, and kernel bugs could all corrupt a filesystem
without marking the filesystem dirty or in error. If you are
using journaling on your filesystem, your filesystem will never
be marked dirty, so it will not normally be checked. A filesys‐
tem error detected by the kernel will still force an fsck on the
next reboot, but it may already be too late to prevent data loss
at that point.
This option requires a kernel which supports incrementing the
count on each mount. This feature has not been incorporated into
kernel versions older than 2.6.25.
See also the
.B \-c
option for time-dependent checking.
.TP
\fB-M\fR | \fB--mnt-count \fIcount\fR
Set the number of times the filesystem has been mounted. If set
to a greater value than the max-mount-counts parameter set by
the
.B \-m
option,
.BR fsck.reiserfs(8)
will check the filesystem at the next
reboot.
.SH POSSIBLE SCENARIOS OF USING REISERFSTUNE:
1. You have ReiserFS on /dev/hda1, and you wish to have
it working with its journal on the device /dev/journal
.nf
.IP
boot kernel patched with special "relocatable journal support" patch
reiserfstune /dev/hda1 --journal-new-device /dev/journal -f
mount /dev/hda1 and use.
You would like to change max transaction size to 512 blocks
reiserfstune -t 512 /dev/hda1
You would like to use your file system on another kernel that doesn't
contain relocatable journal support.
umount /dev/hda1
reiserfstune /dev/hda1 -j /dev/journal --journal-new-device /dev/hda1 --make-journal-standard
mount /dev/hda1 and use.
.LP
2. You would like to have ReiserFS on /dev/hda1 and to be able to
switch between different journals including journal located on the
device containing the filesystem.
.nf
.IP
boot kernel patched with special "relocatable journal support" patch
mkreiserfs /dev/hda1
you got solid state disk (perhaps /dev/sda, they typically look like scsi disks)
reiserfstune --journal-new-device /dev/sda1 -f /dev/hda1
Your scsi device dies, it is three in the morning, you have an extra IDE device
lying around
reiserfsck --no-journal-available /dev/hda1
or
reiserfsck --rebuild-tree --no-journal-available /dev/hda1
reiserfstune --no-journal-available --journal-new-device /dev/hda1 /dev/hda1
using /dev/hda1 under patched kernel
.SH AUTHOR
This version of \fBreiserfstune\fR has been written by Vladimir
Demidov <vova@namesys.com> and Edward Shishkin <edward@namesys.com>.
.SH BUGS
Please report bugs to the ReiserFS developers <reiserfs-dev@namesys.com>, providing
as much information as possible--your hardware, kernel, patches, settings, all printed
messages; check the syslog file for any related information.
.SH SEE ALSO
.BR reiserfsck (8),
.BR debugreiserfs (8),
.BR mkreiserfs (8)
+857
View File
@@ -0,0 +1,857 @@
/*
* Copyright 2002-2004 by Hans Reiser, licensing governed by
* reiserfsprogs/README
*/
#define _GNU_SOURCE
#include "tune.h"
#include <getopt.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#include <limits.h>
#include "parse_time.h"
char *program_name;
static void message( const char * fmt, ... )
__attribute__ ((format (printf, 1, 2)));
static void message( const char * fmt, ... )
{
char *buf;
va_list args;
buf = NULL;
va_start( args, fmt );
vasprintf( &buf, fmt, args );
va_end( args );
if( buf ) {
fprintf( stderr, "%s: %s\n", program_name, buf );
free( buf );
}
}
reiserfs_filsys_t * fs;
static void print_usage_and_exit(void)
{
message ("Usage: %s [options] device [block-count]\n"
"\n"
"Options:\n\n"
" -j | --journal-device file\tcurrent journal device\n"
" --journal-new-device file\tnew journal device\n"
" -o | --journal-new-offset N\tnew journal offset in blocks\n"
" -s | --journal-new-size N\tnew journal size in blocks\n"
" -t | --trans-max-size N\tnew journal max transaction size in blocks\n"
" --no-journal-available\tcurrent journal is not available\n"
" --make-journal-standard\tnew journal to be standard\n"
/*"\t-p | --keep-old-journal-param (keep parametrs from old journal to new one)\n"*/
" -b | --add-badblocks file\tadd to bad block list\n"
" -B | --badblocks file\t\tset the bad block list\n"
" -u | --uuid UUID|random\tset new UUID\n"
" -l | --label LABEL\t\tset new label\n"
" -f | --force\t\t\tforce tuning, less confirmations\n"
" -c | --check-interval\t\tset interval in days for fsck -a to check,\n"
" \t\t\"disable\" to disable check,\n"
" \t\tor \"default\" to restore default\n"
" -C | --time-last-checked\tset the time the filesystem was last checked\n"
" \t(now or YYYYMMDD[HH[MM[SS]]])\n"
" -m | --max-mnt-count\t\tset maximum number of mounts before fsck -a\n"
" \t\tchecks, \"disable\" to disable check,\n"
" \t\tor \"default\" to restore default\n"
" -M | --mnt-count\t\tset the number of times the filesystem\n"
" \t\thas been mounted\n"
" -h | --help\t\t\tprint help and exit\n"
" -V\t\t\t\tprint version and exit\n", program_name);
exit (1);
}
unsigned long Journal_size = 0;
int Max_trans_size = JOURNAL_TRANS_MAX;
unsigned short Max_mnt_count = 0;
unsigned short Mnt_count = 0;
unsigned int Check_interval = 0;
time_t Time_last_checked = 0;
int Offset = 0;
__u16 Options = 0;
int Force = 0;
int Bads = 0;
char * LABEL;
unsigned char UUID[16];
char * badblocks_file;
/* If specified paramenters defines the standard journal, make it standard. */
static int should_make_journal_standard (reiserfs_filsys_t * fs, char * j_new_dev_name)
{
if (!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb))
return 0;
/*
if (!user_confirmed (stderr, "ATTENTION! Filesystem with non-standard journal "
"found. Continue? (y/n):", "y\n")) {
exit(1);
}
*/
/* make sure journal is on main device, it has default size
and the file system has non-standard magic */
if (j_new_dev_name) {
/* new journal was specified - check if it is available */
if (strcmp (j_new_dev_name, fs->fs_file_name))
return 0;
if (Journal_size && Journal_size !=
journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1)
return 0;
if (Max_trans_size && (Max_trans_size != JOURNAL_TRANS_MAX))
return 0;
} else {
/* new journal was not specified - check ondisk journal params */
if (get_sb_reserved_for_journal(fs->fs_ondisk_sb) <
journal_default_size (fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1)
{
message ("Can not create standard journal of the size %llu",
journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1);
return 0;
}
}
return 1;
}
static int set_standard_journal_params (reiserfs_filsys_t * fs)
{
struct buffer_head * bh;
/* ondisk superblock update */
if (get_sb_version(fs->fs_ondisk_sb) == 0)
memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_3_5_SUPER_MAGIC_STRING,
strlen (REISERFS_3_5_SUPER_MAGIC_STRING));
else if (get_sb_version(fs->fs_ondisk_sb) == 2)
memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_3_6_SUPER_MAGIC_STRING,
strlen (REISERFS_3_6_SUPER_MAGIC_STRING));
else {
message ("Can not set standard reiserfs magic: unknown format found %u,"
" try reiserfsck first", get_sb_version(fs->fs_ondisk_sb));
return 0;
}
set_jp_journal_1st_block (sb_jp(fs->fs_ondisk_sb), get_journal_start_must (fs));
set_jp_journal_dev (sb_jp(fs->fs_ondisk_sb), 0);
set_jp_journal_size (sb_jp(fs->fs_ondisk_sb), journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize));
if (get_jp_journal_max_trans_len(sb_jp(fs->fs_ondisk_sb)) != JOURNAL_TRANS_MAX)
set_jp_journal_max_trans_len(sb_jp(fs->fs_ondisk_sb), JOURNAL_TRANS_MAX);
if (get_jp_journal_max_batch(sb_jp(fs->fs_ondisk_sb)) != JOURNAL_MAX_BATCH)
set_jp_journal_max_batch(sb_jp(fs->fs_ondisk_sb), JOURNAL_MAX_BATCH);
if (get_jp_journal_max_commit_age(sb_jp(fs->fs_ondisk_sb)) != JOURNAL_MAX_COMMIT_AGE)
set_jp_journal_max_commit_age(sb_jp(fs->fs_ondisk_sb), JOURNAL_MAX_COMMIT_AGE);
if (get_jp_journal_max_trans_age(sb_jp(fs->fs_ondisk_sb)) != JOURNAL_MAX_TRANS_AGE)
set_jp_journal_max_trans_age(sb_jp(fs->fs_ondisk_sb), JOURNAL_MAX_TRANS_AGE);
set_sb_reserved_for_journal (fs->fs_ondisk_sb, 0);
/* journal_header update */
bh = getblk(fs->fs_journal_dev,
get_jp_journal_1st_block(sb_jp(fs->fs_ondisk_sb)) +
get_jp_journal_size(sb_jp(fs->fs_ondisk_sb)), fs->fs_blocksize);
if (!bh) {
message ("Cannot get the journal header block. getblk failed.\n");
return 0;
}
((struct reiserfs_journal_header *)(bh->b_data))->jh_journal = *(sb_jp(fs->fs_ondisk_sb));
mark_buffer_uptodate (bh, 1);
mark_buffer_dirty (bh);
bwrite(bh);
brelse(bh);
return 1;
}
void zero_journal (reiserfs_filsys_t * fs)
{
unsigned int i;
struct buffer_head * bh;
unsigned long done;
unsigned long start, len;
fprintf (stderr, "Initializing journal - ");
start = get_jp_journal_1st_block (sb_jp (fs->fs_ondisk_sb));
len = get_jp_journal_size (sb_jp (fs->fs_ondisk_sb));
done = 0;
for (i = 0; i < len; i ++) {
print_how_far (stderr, &done, len, 1, 1/*be quiet*/);
bh = getblk (fs->fs_journal_dev, start + i, fs->fs_blocksize);
if (!bh)
die ("zero_journal: getblk failed");
memset (bh->b_data, 0, bh->b_size);
mark_buffer_dirty (bh);
mark_buffer_uptodate (bh, 1);
bwrite (bh);
brelse (bh);
}
fprintf (stderr, "\n");
fflush (stderr);
}
static int str2int (char * str)
{
int val;
char * tmp;
val = (int) strtol (str, &tmp, 0);
if (*tmp)
die ("%s: strtol is unable to make an integer of %s\n", program_name, str);
return val;
}
static void set_transaction_max_size (char * str)
{
Max_trans_size = str2int( str );
}
/* journal must fit into number of blocks pointed by first bitmap */
static void set_journal_device_size (char * str)
{
Journal_size = str2int (str) ;
}
static void set_offset_in_journal_device (char * str)
{
Offset = str2int( str );
}
static void set_max_mnt_count(char *str)
{
if (!strcmp(str, "disable"))
Max_mnt_count = USHRT_MAX;
else if (!strcmp(str, "default"))
Max_mnt_count = DEFAULT_MAX_MNT_COUNT;
else
Max_mnt_count = str2int(str);
}
static void set_mnt_count(char *str)
{
Mnt_count = str2int(str);
}
static void set_check_interval(char *str)
{
if (!strcmp(str, "disable"))
Check_interval = UINT_MAX;
else if (!strcmp(str, "default"))
Check_interval = DEFAULT_CHECK_INTERVAL;
else
Check_interval = str2int(str) * 60 * 60 * 24;
}
static void set_time_last_checked(char *str)
{
if (!strcmp(str, "now"))
Time_last_checked = time(NULL);
else
Time_last_checked = parse_time(str);
if (Time_last_checked == 0)
print_usage_and_exit ();
}
static void callback_new_badblocks(reiserfs_filsys_t *fs,
struct path *badblock_path,
void *data)
{
struct item_head *tmp_ih;
__u32 *ind_item, i;
tmp_ih = get_ih(badblock_path);
ind_item = (__u32 *)get_item(badblock_path);
for (i = 0; i < I_UNFM_NUM(tmp_ih); i++) {
if (reiserfs_bitmap_test_bit(fs->fs_badblocks_bm,
d32_get (ind_item, i)))
{
message("Block %u is marked as bad already.",
d32_get (ind_item, i));
reiserfs_bitmap_clear_bit(fs->fs_badblocks_bm,
d32_get (ind_item, i));
}
}
pathrelse (badblock_path);
}
static void callback_clear_badblocks(reiserfs_filsys_t *fs,
struct path *badblock_path,
void *data)
{
struct item_head *tmp_ih;
__u32 *ind_item, i;
tmp_ih = get_ih(badblock_path);
ind_item = (__u32 *)get_item(badblock_path);
for (i = 0; i < I_UNFM_NUM(tmp_ih); i++) {
reiserfs_bitmap_clear_bit(fs->fs_bitmap2,
d32_get(ind_item, i));
}
pathrelse (badblock_path);
}
static void add_badblocks(reiserfs_filsys_t *fs) {
unsigned long i, marked = 0;
if (reiserfs_open_ondisk_bitmap (fs) < 0) {
message("Failed to open reiserfs ondisk bitmap.\n");
reiserfs_close(fs);
exit(1);
}
if (create_badblock_bitmap (fs, badblocks_file)) {
message("Failed to initialize the bad block bitmap.\n");
reiserfs_close(fs);
exit(1);
}
if (Bads == 1)
badblock_list(fs, callback_new_badblocks, NULL);
else
badblock_list(fs, callback_clear_badblocks, NULL);
for (i = 0; i < get_sb_block_count (fs->fs_ondisk_sb); i ++) {
if (reiserfs_bitmap_test_bit (fs->fs_badblocks_bm, i)) {
if (!reiserfs_bitmap_test_bit (fs->fs_bitmap2, i)) {
reiserfs_bitmap_set_bit (fs->fs_bitmap2, i);
marked++;
} else {
/* Check that this is a block */
message("Bad block %lu is used already in reiserfs tree. "
"To mark it as a bad block use reiserfsck\n"
"--fix-fixable with -B option.", i);
reiserfs_bitmap_clear_bit (fs->fs_badblocks_bm, i);
}
}
}
if (marked) {
set_sb_free_blocks(fs->fs_ondisk_sb, get_sb_free_blocks(fs->fs_ondisk_sb) -
fs->fs_badblocks_bm->bm_set_bits);
mark_buffer_dirty(fs->fs_super_bh);
}
if (Bads == 1) {
/* fs->fs_badblocks_bm contains blocks which are not in the bad
block list yet. Merge it with what is in the tree already. */
badblock_list(fs, mark_badblock, NULL);
}
if (marked) {
add_badblock_list(fs, 1);
}
message("%lu blocks were marked as bad.", marked);
}
int main (int argc, char **argv)
{
reiserfs_filsys_t * fs;
char * device_name;
char * jdevice_name;
char * j_new_device_name;
int c;
static int flag;
struct reiserfs_journal_header * j_head;
reiserfs_trans_t old, new;
int Is_journal_or_maxtrans_size_specified = 0;
program_name = strrchr( argv[ 0 ], '/' );
if (program_name)
program_name++;
else
program_name = argv[ 0 ];
if (argc < 2)
print_usage_and_exit ();
device_name = 0;
jdevice_name = 0;
j_new_device_name = 0;
memset(UUID, 0, 16);
while (1) {
static struct option options[] = {
{"help", no_argument, 0, 'h'},
{"journal-device", required_argument, 0, 'j'},
{"journal-new-device", required_argument, &flag, OPT_NEW_J},
{"journal-new-size", required_argument, 0, 's'},
{"trans-max-size", required_argument, 0, 't'},
{"journal-new-offset", required_argument, 0, 'o'},
{"no-journal-available", no_argument, &flag, OPT_SKIP_J},
/*{"keep-old-journal-param", no_argument, 0, 'p'},*/
{"uuid", required_argument, 0, 'u'},
{"label", required_argument, 0, 'l'},
{"add-badblocks", required_argument, 0, 'b'},
{"badblocks", required_argument, 0, 'B'},
{"force", no_argument, 0, 'f'},
{"make-journal-standard", no_argument, &flag, OPT_STANDARD},
{"check-interval", required_argument, 0, 'c'},
{"time-last-checked", required_argument, 0, 'C'},
{"max-mount-count", required_argument, 0, 'm'},
{"mount-count", required_argument, 0, 'M'},
{0, 0, 0, 0}
};
int option_index;
c = getopt_long (argc, argv, "hj:s:t:o:fu:l:b:B:Vc:C:m:M:",
options, &option_index);
if (c == -1)
break;
switch (c) {
case 0:
/* long-only optins */
if (flag == OPT_NEW_J) {
Options |= OPT_NEW_J;
j_new_device_name = optarg;
}
if (flag == OPT_SKIP_J) {
Options |= OPT_SKIP_J;
}
if (flag == OPT_STANDARD) {
Options |=OPT_STANDARD;
}
break;
case 'j': /* --journal-device */
jdevice_name = optarg;
break;
case 's': /* --journal-new-size */
set_journal_device_size (optarg);
Is_journal_or_maxtrans_size_specified = 1;
break;
case 't': /* --trans-max-size */
set_transaction_max_size (optarg);
Is_journal_or_maxtrans_size_specified = 1;
break;
case 'o': /* --offset */
set_offset_in_journal_device (optarg);
break;
case 'f':
/* forces replacing standard journal with non-standard
one. Specified more than once - allows to avoid asking for
confirmation */
Force ++;
break;
case 'b': /* --add-badblocks */
asprintf (&badblocks_file, "%s", optarg);
Bads = 1;
break;
case 'B': /* --badblocks */
asprintf (&badblocks_file, "%s", optarg);
Bads = 2;
break;
case 'u':
/* UUID */
#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
if (!strcmp(optarg, "random")) {
uuid_generate(UUID);
} else {
if (uuid_parse(optarg, UUID) < 0) {
message ("Invalid UUID '%s' was specified\n", optarg);
return 1;
}
}
#else
message ("Cannot set the UUID, uuidlib was not found "
"by configure.\n");
return 1;
#endif
break;
case 'l':
/* LABEL */
LABEL = optarg;
break;
case 'V':
print_banner("reiserfstune");
exit(0);
case 'h':
print_usage_and_exit();
break;
case 'c':
set_check_interval(optarg);
break;
case 'C':
set_time_last_checked(optarg);
break;
case 'm':
set_max_mnt_count(optarg);
break;
case 'M':
set_mnt_count(optarg);
break;
#if 0
case 'J': /* --journal-new-device */
Options |= OPT_NEW_J;
j_new_device_name = optarg;
break;
case 'u': /* --no-journal-available */
Options |= OPT_SKIPJ;
break;
case 'p': /* --keep-old-journal-param */
Options |= OPT_KEEPO;
break;
#endif
default:
print_usage_and_exit();
}
}
if (optind != argc - 1)
print_usage_and_exit ();
/* device to be formatted */
device_name = argv [optind];
fs = reiserfs_open (device_name, O_RDONLY, 0, NULL, 1);
if (no_reiserfs_found(fs)) {
message ("Cannot open reiserfs on %s", device_name);
return 1;
}
/* journal was opened or it wasn't opened but the option
--no-journal-available has been specified by user */
/* make sure filesystem is not mounted */
if (misc_device_mounted(fs->fs_file_name) > 0) {
/* fixme: it can not be mounted, btw */
message ("Reiserfstune is not allowed to be run on mounted filesystem.");
reiserfs_close (fs);
return 1;
}
if (!reiserfs_is_fs_consistent (fs)) {
message ("Filesystem looks not cleanly umounted, check the consistency first.\n");
reiserfs_close (fs);
return 1;
}
reiserfs_reopen (fs, O_RDWR);
if (badblocks_file) {
add_badblocks(fs);
reiserfs_close(fs);
exit(0);
}
if (!jdevice_name && !(Options & OPT_SKIP_J)) {
message ("Journal device has not been specified. Assuming journal is on the main "
"device (%s).\n", device_name);
jdevice_name = device_name;
}
if (jdevice_name && (Options & OPT_SKIP_J)) {
message ("Either specify journal device, "
"or choose the option --no-journal-available");
return 1;
}
if (j_new_device_name && (Options & OPT_STANDARD)) {
/* New device was specified and --make-journal-standard was also. */
message ("Either specify new journal device, "
"or choose the option --make-journal-standard");
return 1;
}
/* now we try to open journal, it makes sence if there is no the flag
NEED_TUNE in ondisk superblock and --no-journal available is not
specified. */
if (get_jp_journal_magic(sb_jp(fs->fs_ondisk_sb)) != NEED_TUNE &&
!(Options & OPT_SKIP_J))
{
if (reiserfs_open_journal (fs, jdevice_name, O_RDWR
#if defined(O_LARGEFILE)
| O_LARGEFILE
#endif
))
{
message ("Failed to open the journal device (%s).", jdevice_name);
return 1;
}
if (reiserfs_journal_params_check(fs)) {
message ("Unable to open old journal. Wrong journal parameters.");
reiserfs_close (fs);
return 1;
}
}
/* in spite of journal was opened, the file system can be non-consistent or
there are non-replayed transaction in journal,
make sure it isn't (if there is no the flag NEED_TUNE in ondisk superblock */
if (get_jp_journal_magic(sb_jp(fs->fs_ondisk_sb)) != NEED_TUNE &&
reiserfs_journal_opened (fs)) {
j_head = (struct reiserfs_journal_header *)(fs->fs_jh_bh->b_data);
if (get_boundary_transactions(fs, &old, &new)) {
if (new.trans_id != get_jh_last_flushed(j_head)) {
message ("There are non-replayed transaction in old journal,"
" check filesystem consistency first");
reiserfs_close (fs);
return 1;
}
}
if (!reiserfs_is_fs_consistent (fs)) {
message ("Check filesystem consistency first");
reiserfs_close (fs);
return 1;
}
}
/* set UUID and LABEL if specified */
if (fs->fs_format == REISERFS_FORMAT_3_6) {
int need_dirty = 0;
#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
if (!uuid_is_null(UUID)) {
memcpy (fs->fs_ondisk_sb->s_uuid, UUID, 16);
need_dirty = 1;
}
#endif
if (LABEL != NULL) {
if (strlen (LABEL) > 16)
message ("Specified LABEL is longer then 16 characters, will be truncated\n");
strncpy (fs->fs_ondisk_sb->s_label, LABEL, 16);
need_dirty = 1;
}
if (Max_mnt_count &&
Max_mnt_count != get_sb_v2_max_mnt_count(fs->fs_ondisk_sb)) {
if (Max_mnt_count <= 0)
reiserfs_exit(1, "max-mnt-count must be > 0\n");
set_sb_v2_max_mnt_count(fs->fs_ondisk_sb, Max_mnt_count);
need_dirty = 1;
}
if (Mnt_count &&
Mnt_count != get_sb_v2_mnt_count(fs->fs_ondisk_sb)) {
if (Max_mnt_count <= 0)
reiserfs_exit(1, "max-mnt-count must be > 0\n");
set_sb_v2_mnt_count(fs->fs_ondisk_sb, Mnt_count);
need_dirty = 1;
}
if (Check_interval &&
Check_interval != get_sb_v2_check_interval(fs->fs_ondisk_sb)) {
if (Check_interval <= 0)
reiserfs_exit(1, "check-interval must be > 0\n");
set_sb_v2_check_interval(fs->fs_ondisk_sb,
Check_interval);
need_dirty = 1;
}
if (Time_last_checked &&
Time_last_checked != get_sb_v2_lastcheck(fs->fs_ondisk_sb)) {
set_sb_v2_lastcheck(fs->fs_ondisk_sb, Time_last_checked);
need_dirty = 1;
}
if (need_dirty) {
mark_buffer_dirty (fs->fs_super_bh);
fs->fs_dirt = 1;
}
} else {
#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
if (!uuid_is_null(UUID))
reiserfs_exit (1, "UUID cannot be specified for 3.5 format\n");
#endif
if (LABEL)
reiserfs_exit (1, "LABEL cannot be specified for 3.5 format\n");
if (Max_mnt_count)
reiserfs_exit (1, "max-mnt-count cannot be specified for 3.5 format\n");
if (Check_interval)
reiserfs_exit (1, "check-interval cannot be specified for 3.5 format\n");
}
if (!j_new_device_name) {
/* new journal device hasn't been specified */
printf ("Current parameters:\n");
print_filesystem_state (stdout, fs);
print_block (stdout, fs, fs->fs_super_bh);
if ((Options & OPT_STANDARD)
&& should_make_journal_standard(fs, j_new_device_name))
{
if (!user_confirmed (stderr, "ATTENTION! Filesystem with "
"non-standard journal found. Continue? (y/n):", "y\n"))
{
exit(1);
}
fs->fs_journal_dev = fs->fs_dev;
if (set_standard_journal_params (fs)) {
printf ("\nNew parameters:\n");
print_filesystem_state (stdout, fs);
print_block (stdout, fs, fs->fs_super_bh);
printf ("New journal parameters:\n");
print_journal_params (stdout, sb_jp (fs->fs_ondisk_sb));
mark_buffer_dirty (fs->fs_super_bh);
mark_buffer_uptodate (fs->fs_super_bh, 1);
reiserfs_close (fs);
printf ("Syncing.."); fflush (stdout);
sync ();
printf ("ok\n");
return 0;
}
}
if (Is_journal_or_maxtrans_size_specified) {
/* new journal device hasn't been specified, but
journal size or max transaction size have been, so we suppose
that journal device remains the same */
if (!reiserfs_journal_opened (fs)) {
message("Cannot set up new paramenters for not specified journal.");
return 1;
}
j_new_device_name = jdevice_name;
} else {
/* the only parameter has been specified is device_name, so
there is nothing to do */
reiserfs_close (fs);
return 0;
}
}
/* new journal device has been specified */
/* make sure new journal device is block device file */
if (!can_we_format_it (j_new_device_name, Force)) {
reiserfs_close (fs);
return 1;
}
if (!strcmp (device_name, j_new_device_name)) {
unsigned long reserved, journal_size;
/* we have to put journal on main device. It is only possible if there
is enough space reserved by mkreiserfs */
if (!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb))
/* standard journal */
reserved = get_jp_journal_size(sb_jp(fs->fs_ondisk_sb)) + 1;
else
/* non-standard journal */
reserved = get_sb_reserved_for_journal (fs->fs_ondisk_sb);
journal_size = Journal_size;
if (!journal_size) {
journal_size = journal_default_size(fs->fs_super_bh->b_blocknr, fs->fs_blocksize) + 1;
message("Journal size has not been specified. Assuming it is the default size (%lu)",
journal_size);
}
/* journal_size = (Journal_size ? Journal_size : // specified
(fs->fs_blocksize == 1024 ? (fs->fs_blocksize) * 8 - 3 -
REISERFS_DISK_OFFSET_IN_BYTES / fs->fs_blocksize :
JOURNAL_DEFAULT_SIZE + 1)); // default
*/
if (journal_size + Offset > get_journal_start_must (fs) + reserved) {
message ("There is no enough space reserved for journal on main "
"device (journal_size=%lu, reserved=%lu)\n", journal_size,
reserved);
reiserfs_close (fs);
return 1;
}
}
message ("Current journal parameters:");
print_journal_params (stdout, sb_jp (fs->fs_ondisk_sb));
if (!is_reiserfs_jr_magic_string (fs->fs_ondisk_sb)) {
/* we have standard journal, so check if we can convert it
to non-standard one */
/*
if (!should_make_journal_non_standard (Force)) {
reiserfs_close (fs);
return 1;
}
*/
if (is_reiserfs_3_6_magic_string (fs->fs_ondisk_sb))
set_sb_version (fs->fs_ondisk_sb, REISERFS_FORMAT_3_6);
else if (is_reiserfs_3_5_magic_string (fs->fs_ondisk_sb))
set_sb_version (fs->fs_ondisk_sb, REISERFS_FORMAT_3_5);
else {
message ("Could not convert from unknown version, try reiserfsck first");
reiserfs_close (fs);
return 1;
}
memcpy (fs->fs_ondisk_sb->s_v1.s_magic, REISERFS_JR_SUPER_MAGIC_STRING,
strlen (REISERFS_JR_SUPER_MAGIC_STRING));
set_sb_reserved_for_journal (fs->fs_ondisk_sb,
get_jp_journal_size (sb_jp(fs->fs_ondisk_sb)) + 1);
}
/* now we are going to close old journal and to create a new one */
reiserfs_close_journal (fs);
if (!reiserfs_create_journal (fs, j_new_device_name, Offset,
Journal_size, Max_trans_size, Force)) {
message ("Could not create new journal");
reiserfs_close (fs);
return 1;
}
if (should_make_journal_standard (fs, j_new_device_name))
set_standard_journal_params (fs);
message ("New journal parameters:");
print_journal_params (stdout, sb_jp (fs->fs_ondisk_sb));
print_block (stdout, fs, fs->fs_super_bh);
if (Force < 2) {
message ("ATTENTION: YOU ARE ABOUT TO SETUP THE NEW JOURNAL FOR THE \"%s\"!\n"
"AREA OF \"%s\" DEDICATED FOR JOURNAL WILL BE ZEROED!",
device_name, j_new_device_name);
if (!user_confirmed (stderr, "Continue (y/n):", "y\n")) {
return 1;
}
}
zero_journal (fs);
reiserfs_close (fs);
printf ("Syncing.."); fflush (stdout);
sync ();
printf ("ok\n");
return 0;
}
+32
View File
@@ -0,0 +1,32 @@
/*
* Copyright 2002-2004 by Hans Reiser, licensing governed by
* reiserfsprogs/README
*/
#ifndef HAVE_CONFIG_H
# include "config.h"
#endif
#include "io.h"
#include "misc.h"
#include "reiserfs_lib.h"
#include "../version.h"
#if defined(HAVE_LIBUUID) && defined(HAVE_UUID_UUID_H)
# include <uuid/uuid.h>
#endif
/*
* options
*/
#define OPT_SUPER_FORCE 0x0010
#define OPT_OLD_J 0x0100
#define OPT_NEW_J 0x0200
#define OPT_SIZEJ 0x0400
#define OPT_TMAXS 0x0800
#define OPT_OFSET 0x1000
#define OPT_SKIP_J 0x2000
#define OPT_KEEPO 0x4000
#define OPT_FORCE 0x8000
#define OPT_STANDARD 0x0020