diff -Nru e2fsprogs-1.39/ChangeLog e2fsprogs-1.39-tyt1/ChangeLog --- e2fsprogs-1.39/ChangeLog 2006-05-14 17:15:12.000000000 -0400 +++ e2fsprogs-1.39-tyt1/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,25 @@ +2006-10-01 Theodore Tso + + * configure, configure.in: Include -lpthread if building with + devmapper support, since the latest devmapper library uses + -lpthread. (Addresses Debian bug: #388718) + + * MCONFIG.in: Define DEPLIBBLKID, DEPSTATIC_LIBBLKID, and + DEPPROFILED_LIBBLKID. + +2006-09-12 Theodore Tso + + * e2fsprogs.spec.in (Group): Use License tag instead of Copyright, + and specify GPLv2 + +2006-09-11 Theodore Tso + + * e2fsprogs.spec.in: Remove duplicate entry in the .spec file + +2006-08-06 Theodore Tso + + * configure.in: Add test to see if diff supports the -u option + 2006-04-09 Theodore Ts'o * config/config.guess, config/config.sub: Update to newer versions diff -Nru e2fsprogs-1.39/configure e2fsprogs-1.39-tyt1/configure --- e2fsprogs-1.39/configure 2006-04-08 21:37:51.000000000 -0400 +++ e2fsprogs-1.39-tyt1/configure 2006-10-06 23:42:52.000000000 -0400 @@ -309,7 +309,7 @@ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS E2FSPROGS_YEAR E2FSPROGS_MONTH E2FSPROGS_DAY E2FSPROGS_VERSION build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT LD CPP EGREP LINUX_INCLUDE MAINTAINER_CMT HTREE_CMT ELF_CMT BSDLIB_CMT PROFILE_CMT CHECKER_CMT LIB_EXT STATIC_LIB_EXT PROFILED_LIB_EXT SWAPFS_CMT DEBUGFS_CMT IMAGER_CMT RESIZER_CMT E2FSCK_TYPE FSCK_PROG FSCK_MAN E2INITRD_PROG E2INITRD_MAN DEVMAPPER_REQ DEVMAPPER_PC_LIBS DEVMAPPER_LIBS STATIC_DEVMAPPER_LIBS GETTEXT_PACKAGE PACKAGE VERSION SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE RANLIB ac_ct_RANLIB ALLOCA GLIBC21 HAVE_POSIX_PRINTF HAVE_ASPRINTF HAVE_SNPRINTF HAVE_WPRINTF LIBICONV LTLIBICONV INTLBISON BUILD_INCLUDED_LIBINTL USE_INCLUDED_LIBINTL CATOBJEXT DATADIRNAME INSTOBJEXT GENCAT INTLOBJS INTL_LIBTOOL_SUFFIX_PREFIX INTLLIBS LIBINTL LTLIBINTL POSUB BINARY_TYPE LN LN_S MV CP RM CHMOD AWK SED PERL LDCONFIG AR ac_ct_AR STRIP ac_ct_STRIP BUILD_CC SIZEOF_SHORT SIZEOF_INT SIZEOF_LONG SIZEOF_LONG_LONG SOCKET_LIB DLOPEN_LIB LINUX_CMT CYGWIN_CMT UNIX_CMT root_prefix root_bindir root_sbindir root_libdir root_sysconfdir LDFLAG_STATIC SS_DIR ET_DIR DO_TEST_SUITE INTL_FLAGS BUILD_CFLAGS BUILD_LDFLAGS LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS E2FSPROGS_YEAR E2FSPROGS_MONTH E2FSPROGS_DAY E2FSPROGS_VERSION build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT LD CPP EGREP LINUX_INCLUDE MAINTAINER_CMT HTREE_CMT ELF_CMT BSDLIB_CMT PROFILE_CMT CHECKER_CMT LIB_EXT STATIC_LIB_EXT PROFILED_LIB_EXT SWAPFS_CMT DEBUGFS_CMT IMAGER_CMT RESIZER_CMT E2FSCK_TYPE FSCK_PROG FSCK_MAN E2INITRD_PROG E2INITRD_MAN DEVMAPPER_REQ DEVMAPPER_PC_LIBS DEVMAPPER_LIBS STATIC_DEVMAPPER_LIBS GETTEXT_PACKAGE PACKAGE VERSION SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE RANLIB ac_ct_RANLIB ALLOCA GLIBC21 HAVE_POSIX_PRINTF HAVE_ASPRINTF HAVE_SNPRINTF HAVE_WPRINTF LIBICONV LTLIBICONV INTLBISON BUILD_INCLUDED_LIBINTL USE_INCLUDED_LIBINTL CATOBJEXT DATADIRNAME INSTOBJEXT GENCAT INTLOBJS INTL_LIBTOOL_SUFFIX_PREFIX INTLLIBS LIBINTL LTLIBINTL POSUB BINARY_TYPE LN LN_S MV CP RM CHMOD AWK SED PERL LDCONFIG AR ac_ct_AR STRIP ac_ct_STRIP BUILD_CC SIZEOF_SHORT SIZEOF_INT SIZEOF_LONG SIZEOF_LONG_LONG SOCKET_LIB DLOPEN_LIB UNI_DIFF_OPTS LINUX_CMT CYGWIN_CMT UNIX_CMT root_prefix root_bindir root_sbindir root_libdir root_sysconfdir LDFLAG_STATIC SS_DIR ET_DIR DO_TEST_SUITE INTL_FLAGS BUILD_CFLAGS BUILD_LDFLAGS LIBOBJS LTLIBOBJS' ac_subst_files='MCONFIG MAKEFILE_ELF MAKEFILE_BSDLIB MAKEFILE_PROFILE MAKEFILE_CHECKER MAKEFILE_LIBRARY ASM_TYPES_HEADER' # Initialize some variables set by options. @@ -3469,8 +3469,8 @@ DEVMAPPER_REQ='libselinux libsepol' DEVMAPPER_PC_LIBS='-ldevmapper' - DEVMAPPER_LIBS='-ldevmapper -lselinux -lsepol' - STATIC_DEVMAPPER_LIBS='/usr/lib/libdevmapper.a /usr/lib/libselinux.a /usr/lib/libsepol.a' + DEVMAPPER_LIBS='-lpthread -ldevmapper -lselinux -lsepol' + STATIC_DEVMAPPER_LIBS='-lpthread /usr/lib/libdevmapper.a /usr/lib/libselinux.a /usr/lib/libsepol.a' fi @@ -14128,6 +14128,16 @@ _ACEOF fi +echo "$as_me:$LINENO: checking for unified diff option" >&5 +echo $ECHO_N "checking for unified diff option... $ECHO_C" >&6 +if diff -u $0 $0 >& /dev/null ; then + UNI_DIFF_OPTS=-u +else + UNI_DIFF_OPTS=-c +fi +echo "$as_me:$LINENO: result: $UNI_DIFF_OPTS" >&5 +echo "${ECHO_T}$UNI_DIFF_OPTS" >&6 + case "$host_os" in linux*) cat >>confdefs.h <<\_ACEOF @@ -15067,6 +15077,7 @@ s,@SIZEOF_LONG_LONG@,$SIZEOF_LONG_LONG,;t t s,@SOCKET_LIB@,$SOCKET_LIB,;t t s,@DLOPEN_LIB@,$DLOPEN_LIB,;t t +s,@UNI_DIFF_OPTS@,$UNI_DIFF_OPTS,;t t s,@LINUX_CMT@,$LINUX_CMT,;t t s,@CYGWIN_CMT@,$CYGWIN_CMT,;t t s,@UNIX_CMT@,$UNIX_CMT,;t t diff -Nru e2fsprogs-1.39/configure.in e2fsprogs-1.39-tyt1/configure.in --- e2fsprogs-1.39/configure.in 2006-04-08 21:36:21.000000000 -0400 +++ e2fsprogs-1.39-tyt1/configure.in 2006-10-06 23:42:52.000000000 -0400 @@ -496,8 +496,8 @@ DEVMAPPER_REQ='libselinux libsepol' DEVMAPPER_PC_LIBS='-ldevmapper' - DEVMAPPER_LIBS='-ldevmapper -lselinux -lsepol' - STATIC_DEVMAPPER_LIBS='/usr/lib/libdevmapper.a /usr/lib/libselinux.a /usr/lib/libsepol.a' + DEVMAPPER_LIBS='-lpthread -ldevmapper -lselinux -lsepol' + STATIC_DEVMAPPER_LIBS='-lpthread /usr/lib/libdevmapper.a /usr/lib/libselinux.a /usr/lib/libsepol.a' fi] , @@ -687,6 +687,17 @@ AC_DEFINE(HAVE_OPTRESET) fi dnl +dnl Check for unified diff +dnl +AC_MSG_CHECKING(for unified diff option) +if diff -u $0 $0 >& /dev/null ; then + UNI_DIFF_OPTS=-u +else + UNI_DIFF_OPTS=-c +fi +AC_MSG_RESULT($UNI_DIFF_OPTS) +AC_SUBST(UNI_DIFF_OPTS) +dnl dnl We use the EXT2 ioctls only under Linux dnl case "$host_os" in diff -Nru e2fsprogs-1.39/contrib/build-rpm e2fsprogs-1.39-tyt1/contrib/build-rpm --- e2fsprogs-1.39/contrib/build-rpm 2005-09-06 05:40:13.000000000 -0400 +++ e2fsprogs-1.39-tyt1/contrib/build-rpm 2006-10-06 23:42:52.000000000 -0400 @@ -21,7 +21,8 @@ # Remove any build files from the temporary tarball directory [ -f $tmpdir/$builddir/Makefile ] && make -C $tmpdir/$builddir distclean -(cd $tmpdir && tar czfh ${builddir}.tar.gz $builddir) +EXCLUDE="--exclude .hg*" +(cd $tmpdir && tar czfh ${builddir}.tar.gz $EXCLUDE $builddir) [ "`rpmbuild --version 2> /dev/null`" ] && RPM=rpmbuild || RPM=rpm $RPM --define "_sourcedir `pwd`/$tmpdir" -ba $currdir/e2fsprogs.spec || exit $? diff -Nru e2fsprogs-1.39/COPYING e2fsprogs-1.39-tyt1/COPYING --- e2fsprogs-1.39/COPYING 2005-09-06 05:40:13.000000000 -0400 +++ e2fsprogs-1.39-tyt1/COPYING 2006-10-06 23:42:52.000000000 -0400 @@ -1,8 +1,11 @@ This package, the EXT2 filesystem utilities, are made available under -the GNU Public License, with the exception of the lib/uuid directory -which is made available under a BSD-style license. Please see -lib/uuid/COPYING for more details for the license for the files -comprising the libuuid library. +the GNU Public License version 2, with the exception of the lib/uuid +directory which is made available under a BSD-style license and the +lib/et and lib/ss libraries which are made available under an +MIT-style license. Please see lib/uuid/COPYING for more details for +the license for the files comprising the libuuid library, and the +source file headers of the libet and libss libraries for more +information. However, I request that if the version string in the file version.h contains the string "pre-", or "WIP" that this version of e2fsprogs be diff -Nru e2fsprogs-1.39/debian/changelog e2fsprogs-1.39-tyt1/debian/changelog --- e2fsprogs-1.39/debian/changelog 2006-05-29 11:35:07.000000000 -0400 +++ e2fsprogs-1.39-tyt1/debian/changelog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,55 @@ +e2fsprogs (1.39+1.40-WIP-2006.10.02+dfsg-1) unstable; urgency=low + + * New +dfsg source tarball that has useful documentation removed to + satisfy the DFSG License Nazi's. (Closes: #390664) + * Remove dependency on e2fsprogs from the e2fsck-static package + (Closes: #383521) + * Fix badblocks interpretation of its first optional argument (last-block) + (Closes: #386475) + + -- Theodore Y. Ts'o Tue, 3 Oct 2006 23:36:05 -0400 + +e2fsprogs (1.39+1.40-WIP-2006.10.02-2) unstable; urgency=low + + * Build using the sid version of libc, not experimental! + + -- Theodore Y. Ts'o Mon, 2 Oct 2006 21:43:44 -0400 + +e2fsprogs (1.39+1.40-WIP-2006.10.02-1) unstable; urgency=low + + * Previous NMU acknowledged (Closes: #388718) + * Fix debugfs to print unsigned values for EA's + * Minor man page fixes (Closes: #373004, #369761) + * Allow the default inode size to be specified in mke2fs.conf + * Require mke2fs -F -F for really dangerous operations + * Add Vietnamese translation + * Update French and Dutch translations + * Fix debugfs coredump when lsdel is run without an open filesystem + (Closes: #378335) + * Fix spelling error in e2fsck output + * Fix overflow problems when the number of inodes and blocks is + close to 2**32-1 + * Add GFS/GFS2 support to the blkid library. + * Fix blkid support of empty FAT filesystem labels + * Avoid recursing forever due to symlinks in /dev by the blkid library + * Fix bogus error messages from resize2fs caused by the filesystem + not containing a resize inode. (Closes: #380548) + * Fixed device-mapper probing (it was failing due to an extra '/dev' being + added to the device pathname) + * Make sure the default minimum size journal is big enough to support + on-line resizing. + * Add a versioned build-dep on texi2html (Closes: #389554) + * Remove useful UUID specification thanks to License Nazi's (Closes: #390664) + + -- Theodore Y. Ts'o Mon, 2 Oct 2006 13:04:27 -0400 + +e2fsprogs (1.39-1.1) unstable; urgency=low + + * Non-maintainer upload + * Added -pthreads to devmapper libraries (Closes: #388718) + + -- Ben Hutchings Sat, 30 Sep 2006 12:49:47 +0100 + e2fsprogs (1.39-1) unstable; urgency=low * New upstream version diff -Nru e2fsprogs-1.39/debian/control e2fsprogs-1.39-tyt1/debian/control --- e2fsprogs-1.39/debian/control 2006-05-29 11:32:42.000000000 -0400 +++ e2fsprogs-1.39-tyt1/debian/control 2006-10-06 23:42:52.000000000 -0400 @@ -2,13 +2,13 @@ Section: admin Priority: required Maintainer: Theodore Y. Ts'o -Build-Depends: texi2html, gettext, texinfo, dc, libsepol1-dev, libdevmapper-dev, libselinux1-dev, debhelper (>= 4) +Build-Depends: texi2html (>= 1.76), gettext, texinfo, dc, libsepol1-dev, libdevmapper-dev, libselinux1-dev, debhelper (>= 4) Standards-Version: 3.7.2 Package: e2fsck-static Section: admin Priority: optional -Depends: e2fsprogs (= ${Source-Version}) +Depends: Recommends: sash | zsh-static | busybox-static | zsh30-static Architecture: any Description: statically-linked version of the ext2 filesystem checker diff -Nru e2fsprogs-1.39/debian/e2fsck-static.copyright e2fsprogs-1.39-tyt1/debian/e2fsck-static.copyright --- e2fsprogs-1.39/debian/e2fsck-static.copyright 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/debian/e2fsck-static.copyright 2006-10-06 23:42:52.000000000 -0400 @@ -0,0 +1,44 @@ +This is the Debian GNU/Linux prepackaged version of the static EXT2 +file system consistency checker (e2fsck.static). The EXT2 utilities +were written by Theodore Ts'o and Remy Card +. + +Sources were obtained from http://sourceforge.net/projects/e2fsprogs + +Packaging is copyright (c) 2003-2006 Theodore Ts'o + copyright (c) 1997-2003 Yann Dirson + copyright (c) 2001 Alcove + copyright (c) 1997 Klee Dienes + copyright (c) 1995-1996 Michael Nonweiler + +Upstream Author: Theodore Ts'o + +Copyright notice: + +This package, the EXT2 filesystem utilities, are protected by the GNU +Public License. + +However, I request that if the version string in the file version.h +contains the string "pre-", or "WIP" that this version of e2fsprogs be +distributed in source form only. Please feel free to give a copy of +the e2fsck binary to help a friend recover his or her filesystem, as +the need arises. However, "pre" or "WIP" indicates that this release +is under development, and available for ALPHA testing. So for your +protection as much as mine, I'd prefer that it not appear in a some +distribution --- especially not a CD-ROM distribution! + +The most recent officially distributed version can be found at +http://e2fsprogs.sourceforge.net. If you need to make a distribution, +that's the one you should use. If there is some reason why you'd like +a more recent version that is still in ALPHA testing for your +distribution, please contact me (tytso@mit.edu), and we will very +likely be able to work out something that will work for all concerned. +The release schedules for this package are flexible, if you give me +enough lead time. + + Theodore Ts'o + 15-Mar-2003 + +On Debian GNU systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + diff -Nru e2fsprogs-1.39/debian/rules e2fsprogs-1.39-tyt1/debian/rules --- e2fsprogs-1.39/debian/rules 2006-03-30 00:56:09.000000000 -0500 +++ e2fsprogs-1.39-tyt1/debian/rules 2006-10-06 23:42:52.000000000 -0400 @@ -221,7 +221,7 @@ # statically-linked fsck ${INSTALL_PROGRAM} ${stdbuilddir}/e2fsck/e2fsck.static ${tmpdir}/sbin - ln -s e2fsck.8.gz ${mandir}/man8/e2fsck.static.8.gz + cp ${mandir}/man8/e2fsck.8 ${mandir}/man8/e2fsck.static.8 ln -s et/com_err.h ${tmpdir}/usr/include @@ -291,8 +291,6 @@ # symlinks to prepare dh_installdocs run - mkdir -p ${debdir}/e2fsck-static/usr/share/doc/ - ln -sf e2fsprogs ${debdir}/e2fsck-static/usr/share/doc/e2fsck-static mkdir -p ${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION} mkdir -p ${debdir}/libblkid-dev/usr/share/doc @@ -308,7 +306,7 @@ mkdir -p ${debdir}/libuuid${UUID_SOVERSION}/usr/share/doc/libuuid${UUID_SOVERSION} mkdir -p ${debdir}/uuid-dev/usr/share/doc - ln -sf libuuid${UUID_SOVERSION} ${debdir}/uuid-dev/usr/share/doc/uuid-dev +# ln -sf libuuid${UUID_SOVERSION} ${debdir}/uuid-dev/usr/share/doc/uuid-dev mkdir -p ${debdir}/e2fslibs/usr/share/doc/e2fslibs mkdir -p ${debdir}/e2fslibs-dev/usr/share/doc @@ -343,17 +341,19 @@ ${debdir}/ss-dev/usr/share/doc/libss${SS_SOVERSION}/examples $(INSTALL) -d ${debdir}/uuid-dev/usr/share/doc/libuuid${UUID_SOVERSION} - $(INSTALL) -p -m 0644 doc/draft-leach-uuids-guids-01.txt \ - ${debdir}/uuid-dev/usr/share/doc/libuuid${UUID_SOVERSION} + if test -f /etc/lsb-release && \ + grep -q DISTRIB_ID=Ubuntu /etc/lsb-release; then \ + $(INSTALL) -p -m 0644 doc/draft-leach-uuids-guids-01.txt \ + ${debdir}/uuid-dev/usr/share/doc/libuuid${UUID_SOVERSION}; \ + fi dh_installinfo -pcomerr-dev ${stdbuilddir}/lib/et/com_err.info dh_installinfo -pe2fslibs-dev ${stdbuilddir}/doc/libext2fs.info - DH_OPTIONS= dh_installchangelogs -pe2fsprogs -plibblkid${BLKID_SOVERSION} - DH_OPTIONS= dh_installchangelogs -pe2fsprogs -plibcomerr${COMERR_SOVERSION} - DH_OPTIONS= dh_installchangelogs -pe2fsprogs -plibss${SS_SOVERSION} - DH_OPTIONS= dh_installchangelogs -pe2fsprogs -plibuuid${UUID_SOVERSION} - DH_OPTIONS= dh_installchangelogs -pe2fsprogs -pe2fslibs + DH_OPTIONS= dh_installchangelogs -pe2fsprogs \ + -plibblkid${BLKID_SOVERSION} -plibcomerr${COMERR_SOVERSION} \ + -plibss${SS_SOVERSION} -plibuuid${UUID_SOVERSION} \ + -pe2fslibs -puuid-dev -pe2fsck-static ifneq ($(ismips),) dh_strip -Xlib64ext2fs-nopic.a diff -Nru e2fsprogs-1.39/debian/uuid-dev.copyright e2fsprogs-1.39-tyt1/debian/uuid-dev.copyright --- e2fsprogs-1.39/debian/uuid-dev.copyright 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/debian/uuid-dev.copyright 2006-10-06 23:42:52.000000000 -0400 @@ -0,0 +1,38 @@ +This package was added to the e2fsprogs debian source package by +Theodore Ts'o on Sat Mar 15 15:33:37 EST 2003 + +It is part of the main e2fsprogs distribution, which can be found at: + + http://sourceforge.net/projects/e2fsprogs + +Upstream Author: Theodore Ts'o + +Copyright: + +Copyright (C) 1999, 2000, 2003, 2004 by Theodore Ts'o + +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, and the entire permission notice in its entirety, + including the disclaimer of warranties. +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. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff -Nru e2fsprogs-1.39/debian/uuid-dev.README.Debian e2fsprogs-1.39-tyt1/debian/uuid-dev.README.Debian --- e2fsprogs-1.39/debian/uuid-dev.README.Debian 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/debian/uuid-dev.README.Debian 2006-10-06 23:42:52.000000000 -0400 @@ -0,0 +1,23 @@ + +In order to santize e2fsprogs to be DFSG free, the file +draft-leach-uuids-guids-01.txt has been removed. It can be obtained +by downloading e2fsprogs from the upstream sources. It may also be +available from other sites on the network, if you do a quick web +search for the string "draft-leach-uuids-guids-01". + +Note that debian/rules is set up to include the file on Ubuntu +systems, so for people trying to build e2fsprogs on Ubuntu systems, +they should start from the upstream sources, and not the +Debian-expurgated sources found in the Debian repository. (n.b., for +WIP releases the command "./util/gen-tarball ubuntu" will help create +tar file which is appropriately named to make life easier for +dpkg-buildpackage.) Since Ubuntu doesn't have the DFSG restrictions, +the documentation which has been removed for Debian's DFSG license +purity shouldn't be denied to Ubuntu users. + + Theodore Ts'o + Ocotober 3, 2006 + + + + diff -Nru e2fsprogs-1.39/debugfs/ChangeLog e2fsprogs-1.39-tyt1/debugfs/ChangeLog --- e2fsprogs-1.39/debugfs/ChangeLog 2006-05-29 11:00:16.000000000 -0400 +++ e2fsprogs-1.39-tyt1/debugfs/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,18 @@ +2006-10-01 Theodore Tso + + * Makefile.in (DEPLIBBLKID): Use DEPLIBBLKID not LIBBLKID to + define the dependencies used by the blkid library. + +2006-08-30 Eric Sandeen + + * htree.c (htree_dump_int_node): Fix printf formats. + +2006-08-29 Theodore Tso + + * lsdel.c (do_lsdel): Fix core-dumping bug. Don't depend on + current_fs being non-NULL until after the call to + common_args_process(). (Addresses Debian Bug: #378335) + 2006-05-29 Theodore Tso * util.c (reset_getopt): In order to support ancient Linux header diff -Nru e2fsprogs-1.39/debugfs/debugfs.c e2fsprogs-1.39-tyt1/debugfs/debugfs.c --- e2fsprogs-1.39/debugfs/debugfs.c 2006-05-08 11:26:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/debugfs/debugfs.c 2006-10-06 23:42:54.000000000 -0400 @@ -124,7 +124,7 @@ int catastrophic = 0; blk_t superblock = 0; blk_t blocksize = 0; - int open_flags = 0; + int open_flags = EXT2_FLAG_SOFTSUPP_FEATURES; char *data_filename = 0; reset_getopt(); @@ -443,9 +443,9 @@ for (i = 0; i < len; i++) if (printable) - fprintf(out, "%c", str[i]); + fprintf(out, "%c", (unsigned char)str[i]); else - fprintf(out, "%02x ", str[i]); + fprintf(out, "%02x ", (unsigned char)str[i]); } static void internal_dump_inode_extra(FILE *out, const char *prefix, @@ -1790,7 +1790,7 @@ int sci_idx; const char *usage = "Usage: debugfs [-b blocksize] [-s superblock] [-f cmd_file] [-R request] [-V] [[-w] [-c] device]"; int c; - int open_flags = 0; + int open_flags = EXT2_FLAG_SOFTSUPP_FEATURES; char *request = 0; int exit_status = 0; char *cmd_file = 0; diff -Nru e2fsprogs-1.39/debugfs/htree.c e2fsprogs-1.39-tyt1/debugfs/htree.c --- e2fsprogs-1.39/debugfs/htree.c 2006-04-27 19:28:22.000000000 -0400 +++ e2fsprogs-1.39-tyt1/debugfs/htree.c 2006-10-06 23:42:52.000000000 -0400 @@ -114,7 +114,7 @@ for (i=0; i < limit.count; i++) { hash = i ? ext2fs_le32_to_cpu(ent[i].hash) : 0; - fprintf(pager, "Entry #%d: Hash 0x%08x%s, block %d\n", i, + fprintf(pager, "Entry #%d: Hash 0x%08x%s, block %u\n", i, hash, (hash & 1) ? " (**)" : "", ext2fs_le32_to_cpu(ent[i].block)); } diff -Nru e2fsprogs-1.39/debugfs/lsdel.c e2fsprogs-1.39-tyt1/debugfs/lsdel.c --- e2fsprogs-1.39/debugfs/lsdel.c 2005-09-24 21:56:38.000000000 -0400 +++ e2fsprogs-1.39-tyt1/debugfs/lsdel.c 2006-10-06 23:42:52.000000000 -0400 @@ -81,12 +81,13 @@ int i; long secs = 0; char *tmp; - time_t now = current_fs->now ? current_fs->now : time(0); + time_t now; FILE *out; if (common_args_process(argc, argv, 1, 2, "ls_deleted_inodes", "[secs]", 0)) return; + if (argc > 1) { secs = strtol(argv[1],&tmp,0); if (*tmp) { @@ -95,6 +96,7 @@ } } + now = current_fs->now ? current_fs->now : time(0); max_delarray = 100; num_delarray = 0; delarray = malloc(max_delarray * sizeof(struct deleted_info)); diff -Nru e2fsprogs-1.39/debugfs/Makefile.in e2fsprogs-1.39-tyt1/debugfs/Makefile.in --- e2fsprogs-1.39/debugfs/Makefile.in 2005-09-06 05:40:13.000000000 -0400 +++ e2fsprogs-1.39-tyt1/debugfs/Makefile.in 2006-10-06 23:42:52.000000000 -0400 @@ -27,7 +27,7 @@ LIBS= $(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(LIBBLKID) \ $(LIBUUID) $(DLOPEN_LIB) -DEPLIBS= $(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(LIBBLKID) $(DEPLIBUUID) +DEPLIBS= $(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(DEPLIBBLKID) $(DEPLIBUUID) .c.o: @echo " CC $<" diff -Nru e2fsprogs-1.39/e2fsck/ChangeLog e2fsprogs-1.39-tyt1/e2fsck/ChangeLog --- e2fsprogs-1.39/e2fsck/ChangeLog 2006-05-29 11:02:15.000000000 -0400 +++ e2fsprogs-1.39-tyt1/e2fsck/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,57 @@ +2006-10-02 Theodore Tso + + * e2fsck.conf.5.in: Minor correction to man page. + (Addresses Debian bug #369761) + +2006-10-01 Theodore Tso + + * Makefile.in (DEPLIBBLKID): Use DEPLIBBLKID not LIBBLKID to + define the dependencies used by the blkid library. + +2006-08-30 Eric Sandeen + + * pass1.c (handle_bad_fs_blocks): use blk_t, not int for first_block. + +2006-08-30 Eric Sandeen + + * unix.c (show_stats): use ext2_ino_t for inode containers. + +2006-08-30 Eric Sandeen + + * pass1.c (new_table_block, handle_fs_bad_blocks): + * super.c (check_super_block): + Use new inlines to calculate group first & last blocks. + +2006-08-30 Eric Sandeen + + * e2fsck.h (e2fsck): Use unsigned types for filesystem counters. + * emptydir.c (add_empty_dirblock): + * iscan.c (main): + * unix.c (show_stats, check_if_skip): Fix printf formats. + +2006-08-30 Eric Sandeen + + * pass1.c (handle_fs_bad_blocks): Remove unused variables. + +2006-08-30 Eric Sandeen + + * pass1b.c (check_if_fs_block): Change block group loop to use + a common pattern of first_block/last_block, etc. + + * super.c (check_super_block): Avoid overflows when iterating over + group descriptors on very large filesystems + +2006-08-30 Theodore Tso + + * pass5.c (check_inode_bitmaps, check_inode_end, check_block_end): + * pass4.c (e2fsck_pass4): Fix potential overflow problems when the + number of blocks is close to 2**31. + +2006-08-29 Theodore Tso + + * super.c (release_inode_blocks): Fix silly spelling error. + (Addresses SourceForge Bug: #1531372) + 2006-05-29 Theodore Tso * pass1b.c: Add missing semicolon when HAVE_INTPTR_T is not defined diff -Nru e2fsprogs-1.39/e2fsck/e2fsck.conf.5.in e2fsprogs-1.39-tyt1/e2fsck/e2fsck.conf.5.in --- e2fsprogs-1.39/e2fsck/e2fsck.conf.5.in 2006-03-27 00:55:38.000000000 -0500 +++ e2fsprogs-1.39-tyt1/e2fsck/e2fsck.conf.5.in 2006-10-06 23:42:52.000000000 -0400 @@ -9,9 +9,9 @@ .I e2fsck.conf is the configuration file for .BR e2fsck (8). -It controls the default parameters used by +It controls the default behavior of .BR e2fsck (8) -when it is creating ext2 or ext3 filesystems. +while it is checking ext2 or ext3 filesystems. .PP The .I e2fsck.conf diff -Nru e2fsprogs-1.39/e2fsck/e2fsck.h e2fsprogs-1.39-tyt1/e2fsck/e2fsck.h --- e2fsprogs-1.39/e2fsck/e2fsck.h 2006-03-18 21:33:55.000000000 -0500 +++ e2fsprogs-1.39-tyt1/e2fsck/e2fsck.h 2006-10-06 23:42:54.000000000 -0400 @@ -6,6 +6,9 @@ * */ +#ifndef _E2FSCK_H +#define _E2FSCK_H + #include #include #ifdef HAVE_UNISTD_H @@ -306,24 +309,25 @@ char start_meta[2], stop_meta[2]; /* File counts */ - int fs_directory_count; - int fs_regular_count; - int fs_blockdev_count; - int fs_chardev_count; - int fs_links_count; - int fs_symlinks_count; - int fs_fast_symlinks_count; - int fs_fifo_count; - int fs_total_count; - int fs_badblocks_count; - int fs_sockets_count; - int fs_ind_count; - int fs_dind_count; - int fs_tind_count; - int fs_fragmented; - int large_files; - int fs_ext_attr_inodes; - int fs_ext_attr_blocks; + __u32 fs_directory_count; + __u32 fs_regular_count; + __u32 fs_blockdev_count; + __u32 fs_chardev_count; + __u32 fs_links_count; + __u32 fs_symlinks_count; + __u32 fs_fast_symlinks_count; + __u32 fs_fifo_count; + __u32 fs_total_count; + __u32 fs_badblocks_count; + __u32 fs_sockets_count; + __u32 fs_ind_count; + __u32 fs_dind_count; + __u32 fs_tind_count; + __u32 fs_fragmented; + __u32 large_files; + __u32 fs_ext_attr_inodes; + __u32 fs_ext_attr_blocks; + int extent_files; time_t now; @@ -464,6 +468,9 @@ struct ext2_inode * inode, const char * proc); extern void e2fsck_write_inode(e2fsck_t ctx, unsigned long ino, struct ext2_inode * inode, const char * proc); +extern void e2fsck_write_inode_full(e2fsck_t ctx, unsigned long ino, + struct ext2_inode * inode, int bufsize, + const char *proc); #ifdef MTRACE extern void mtrace_print(char *mesg); #endif @@ -475,3 +482,4 @@ extern void e2fsck_clear_progbar(e2fsck_t ctx); extern int e2fsck_simple_progress(e2fsck_t ctx, const char *label, float percent, unsigned int dpynum); +#endif /* _E2FSCK_H */ diff -Nru e2fsprogs-1.39/e2fsck/emptydir.c e2fsprogs-1.39-tyt1/e2fsck/emptydir.c --- e2fsprogs-1.39/e2fsck/emptydir.c 2006-03-18 21:34:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/e2fsck/emptydir.c 2006-10-06 23:42:52.000000000 -0400 @@ -94,7 +94,7 @@ if (db->ino == 11) return; /* Inode number 11 is usually lost+found */ - printf(_("Empty directory block %u (#%d) in inode %d\n"), + printf(_("Empty directory block %u (#%d) in inode %u\n"), db->blk, db->blockcnt, db->ino); ext2fs_mark_block_bitmap(edi->empty_dir_blocks, db->blk); diff -Nru e2fsprogs-1.39/e2fsck/iscan.c e2fsprogs-1.39-tyt1/e2fsck/iscan.c --- e2fsprogs-1.39/e2fsck/iscan.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/e2fsck/iscan.c 2006-10-06 23:42:52.000000000 -0400 @@ -98,7 +98,7 @@ int exit_value = FSCK_OK; ext2_filsys fs; ext2_ino_t ino; - int num_inodes = 0; + __u32 num_inodes = 0; struct ext2_inode inode; ext2_inode_scan scan; @@ -135,7 +135,7 @@ } print_resource_track(NULL, &global_rtrack); - printf(_("%d inodes scanned.\n"), num_inodes); + printf(_("%u inodes scanned.\n"), num_inodes); exit(0); } diff -Nru e2fsprogs-1.39/e2fsck/Makefile.in e2fsprogs-1.39-tyt1/e2fsck/Makefile.in --- e2fsprogs-1.39/e2fsck/Makefile.in 2006-03-27 00:44:11.000000000 -0500 +++ e2fsprogs-1.39-tyt1/e2fsck/Makefile.in 2006-10-06 23:42:54.000000000 -0400 @@ -18,17 +18,17 @@ XTRA_CFLAGS= -DRESOURCE_TRACK -I. LIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBBLKID) $(LIBUUID) $(LIBINTL) -DEPLIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBBLKID) $(DEPLIBUUID) +DEPLIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(DEPLIBBLKID) $(DEPLIBUUID) STATIC_LIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(STATIC_LIBBLKID) \ $(STATIC_LIBUUID) $(LIBINTL) -STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(STATIC_LIBBLKID) \ +STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(DEPSTATIC_LIBBLKID) \ $(DEPSTATIC_LIBUUID) PROFILED_LIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR) \ $(PROFILED_LIBBLKID) $(PROFILED_LIBUUID) $(LIBINTL) PROFILED_DEPLIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR) \ - $(PROFILED_LIBBLKID) $(DEPPROFILED_LIBUUID) + $(DEPPROFILED_LIBBLKID) $(DEPPROFILED_LIBUUID) COMPILE_ET=$(top_builddir)/lib/et/compile_et --build-tree @@ -261,6 +261,7 @@ pass1.o: $(srcdir)/pass1.c $(srcdir)/e2fsck.h \ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ + $(top_srcdir)/lib/ext2fs/ext3_extents.h \ $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \ $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \ $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \ diff -Nru e2fsprogs-1.39/e2fsck/pass1b.c e2fsprogs-1.39-tyt1/e2fsck/pass1b.c --- e2fsprogs-1.39/e2fsck/pass1b.c 2006-05-28 20:52:24.000000000 -0400 +++ e2fsprogs-1.39-tyt1/e2fsck/pass1b.c 2006-10-06 23:42:52.000000000 -0400 @@ -779,16 +779,16 @@ static int check_if_fs_block(e2fsck_t ctx, blk_t test_block) { ext2_filsys fs = ctx->fs; - blk_t block; + blk_t first_block; dgrp_t i; - block = fs->super->s_first_data_block; + first_block = fs->super->s_first_data_block; for (i = 0; i < fs->group_desc_count; i++) { - /* Check superblocks/block group descriptros */ + /* Check superblocks/block group descriptors */ if (ext2fs_bg_has_super(fs, i)) { - if (test_block >= block && - (test_block <= block + fs->desc_blocks)) + if (test_block >= first_block && + (test_block <= first_block + fs->desc_blocks)) return 1; } @@ -804,7 +804,7 @@ (test_block == fs->group_desc[i].bg_inode_bitmap)) return 1; - block += fs->super->s_blocks_per_group; + first_block += fs->super->s_blocks_per_group; } return 0; } diff -Nru e2fsprogs-1.39/e2fsck/pass1.c e2fsprogs-1.39-tyt1/e2fsck/pass1.c --- e2fsprogs-1.39/e2fsck/pass1.c 2006-03-18 21:33:56.000000000 -0500 +++ e2fsprogs-1.39-tyt1/e2fsck/pass1.c 2006-10-06 23:42:54.000000000 -0400 @@ -46,6 +46,7 @@ #include "e2fsck.h" #include +#include #include "problem.h" @@ -79,7 +80,7 @@ struct process_block_struct { ext2_ino_t ino; unsigned is_dir:1, is_reg:1, clear:1, suppress:1, - fragmented:1, compressed:1, bbcheck:1; + fragmented:1, compressed:1, bbcheck:1, extent:1; blk_t num_blocks; blk_t max_blocks; e2_blkcnt_t last_block; @@ -89,6 +90,7 @@ struct problem_context *pctx; ext2fs_block_bitmap fs_meta_blocks; e2fsck_t ctx; + void *block_buf; }; struct process_inode_block { @@ -137,7 +139,7 @@ * this is a bogus device/fifo/socket */ if ((ext2fs_inode_data_blocks(fs, inode) != 0) || - (inode->i_flags & EXT2_INDEX_FL)) + (inode->i_flags & (EXT2_INDEX_FL | EXT4_EXTENTS_FL))) return 0; /* @@ -171,7 +173,7 @@ blk_t blocks; if ((inode->i_size_high || inode->i_size == 0) || - (inode->i_flags & EXT2_INDEX_FL)) + (inode->i_flags & (EXT2_INDEX_FL | EXT4_EXTENTS_FL))) return 0; blocks = ext2fs_inode_data_blocks(fs, inode); @@ -389,7 +391,8 @@ struct problem_context pctx; struct scan_callback_struct scan_struct; struct ext2_super_block *sb = ctx->fs->super; - int imagic_fs; + struct ext3_extent_header *eh; + int imagic_fs, extent_fs; int busted_fs_time = 0; int inode_size; @@ -423,6 +426,7 @@ #undef EXT2_BPP imagic_fs = (sb->s_feature_compat & EXT2_FEATURE_COMPAT_IMAGIC_INODES); + extent_fs = (sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS); /* * Allocate bitmaps structures @@ -793,8 +797,7 @@ check_blocks(ctx, &pctx, block_buf); continue; } - } - else if (LINUX_S_ISFIFO (inode->i_mode) && + } else if (LINUX_S_ISFIFO (inode->i_mode) && e2fsck_pass1_check_device_inode(fs, inode)) { check_immutable(ctx, &pctx); check_size(ctx, &pctx); @@ -806,21 +809,73 @@ ctx->fs_sockets_count++; } else mark_inode_bad(ctx, ino); - if (inode->i_block[EXT2_IND_BLOCK]) - ctx->fs_ind_count++; - if (inode->i_block[EXT2_DIND_BLOCK]) - ctx->fs_dind_count++; - if (inode->i_block[EXT2_TIND_BLOCK]) - ctx->fs_tind_count++; - if (inode->i_block[EXT2_IND_BLOCK] || - inode->i_block[EXT2_DIND_BLOCK] || - inode->i_block[EXT2_TIND_BLOCK] || - inode->i_file_acl) { - inodes_to_process[process_inode_count].ino = ino; - inodes_to_process[process_inode_count].inode = *inode; - process_inode_count++; - } else - check_blocks(ctx, &pctx, block_buf); + + eh = (struct ext3_extent_header *)inode->i_block; + if ((inode->i_flags & EXT4_EXTENTS_FL)) { + if ((LINUX_S_ISREG(inode->i_mode) || + LINUX_S_ISDIR(inode->i_mode)) && + ext2fs_extent_header_verify(eh, EXT2_N_BLOCKS * + sizeof(__u32)) == 0) { + if (!extent_fs && + fix_problem(ctx,PR_1_EXTENT_FEATURE,&pctx)){ + sb->s_feature_incompat |= + EXT3_FEATURE_INCOMPAT_EXTENTS; + ext2fs_mark_super_dirty(fs); + extent_fs = 1; + } + } else if (fix_problem(ctx, PR_1_SET_EXTENT_FL, &pctx)){ + inode->i_flags &= ~EXT4_EXTENTS_FL; + e2fsck_write_inode(ctx, ino, inode, "pass1"); + } + } else if (extent_fs && + (LINUX_S_ISREG(inode->i_mode) || + LINUX_S_ISDIR(inode->i_mode)) && + ext2fs_extent_header_verify(eh, EXT2_N_BLOCKS * + sizeof(__u32)) == 0 && + fix_problem(ctx, PR_1_UNSET_EXTENT_FL, &pctx)) { + inode->i_flags |= EXT4_EXTENTS_FL; + e2fsck_write_inode(ctx, ino, inode, "pass1"); + } + if (extent_fs && inode->i_flags & EXT4_EXTENTS_FL) { + ctx->extent_files++; + switch(eh->eh_depth) { + case 0: + break; + case 1: + ctx->fs_ind_count++; + break; + case 2: + ctx->fs_dind_count++; + break; + default: + ctx->fs_tind_count++; + break; + } + if (eh->eh_depth > 0) { + inodes_to_process[process_inode_count].ino = ino; + inodes_to_process[process_inode_count].inode = *inode; + process_inode_count++; + } else { + check_blocks(ctx, &pctx, block_buf); + } + } else { + if (inode->i_block[EXT2_IND_BLOCK]) + ctx->fs_ind_count++; + if (inode->i_block[EXT2_DIND_BLOCK]) + ctx->fs_dind_count++; + if (inode->i_block[EXT2_TIND_BLOCK]) + ctx->fs_tind_count++; + if (inode->i_block[EXT2_IND_BLOCK] || + inode->i_block[EXT2_DIND_BLOCK] || + inode->i_block[EXT2_TIND_BLOCK] || + inode->i_file_acl) { + inodes_to_process[process_inode_count].ino = ino; + inodes_to_process[process_inode_count].inode = *inode; + process_inode_count++; + } else { + check_blocks(ctx, &pctx, block_buf); + } + } if (ctx->flags & E2F_FLAG_SIGNAL_MASK) return; @@ -1363,6 +1418,132 @@ return 0; } +/* sort 0 to the end of the list so we can exit early */ +static EXT2_QSORT_TYPE verify_ind_cmp(const void *a, const void *b) +{ + const __u32 blk_a = *(__u32 *)a - 1, blk_b = *(__u32 *)b - 1; + + return blk_b > blk_a ? -1 : blk_a - blk_b; +} + +/* Verify whether an indirect block is sane. If it has multiple references + * to the same block, or if it has a large number of bad or duplicate blocks + * chances are that it is corrupt and we should just clear it instead of + * trying to salvage it. + * NOTE: this needs to get a copy of the blocks, since it reorders them */ +static int e2fsck_ind_block_verify(struct process_block_struct *p, + void *block_buf, int buflen) +{ + __u32 blocks[EXT2_N_BLOCKS], *indir = block_buf; + int num_indir = buflen / sizeof(*indir); + int i, bad = 0; + + if (num_indir == EXT2_N_BLOCKS) { + memcpy(blocks, block_buf, buflen); + indir = blocks; + } + qsort(indir, num_indir, sizeof(*indir), verify_ind_cmp); + + for (i = 0; i < num_indir; i++) { + if (indir[i] == 0) + break; + + /* bad block number, or duplicate block */ + if (indir[i] < p->ctx->fs->super->s_first_data_block || + indir[i] > p->ctx->fs->super->s_blocks_count || + ext2fs_fast_test_block_bitmap(p->ctx->block_found_map, + indir[i])) + bad++; + + /* shouldn't reference the same block twice within a block */ + if (i > 0 && indir[i] == indir[i - 1]) + bad++; + } + + if ((num_indir <= EXT2_N_BLOCKS && bad > 4) || bad > 8) + return PR_1_INDIRECT_BAD; + +#if DEBUG_E2FSCK + /* For debugging, clobber buffer to ensure it doesn't appear sane */ + memset(indir, 0xca, buflen); +#endif + return 0; +} + +/* we have already verified the header in e2fsck_pass1() before calling this */ +static int e2fsck_ext_block_verify(struct process_block_struct *p, + void *block_buf, int buflen) +{ + struct ext3_extent_header *eh = block_buf; + e2fsck_t ctx = p->ctx; + struct problem_context *pctx = p->pctx; + int i, bad = 0, changed = 0; + + if (eh->eh_depth == 0) { + struct ext3_extent *ex = EXT_FIRST_EXTENT(eh), *ex_prev = NULL; + + for (i = 0; i < eh->eh_entries; i++, ex++) { + /* FIXME: 48-bit check for s_blocks_count_hi */ + if (ex->ee_start_hi && fix_problem(ctx, PR_1_EXTENT_HI, + pctx)) { + ex->ee_start_hi = 0; + changed++; + } + + if (ext2fs_extent_verify(ctx->fs, ex, ex_prev, NULL,0)){ + pctx->blkcount = ex->ee_start; + pctx->num = ex->ee_len; + pctx->blk = ex->ee_block; + if (fix_problem(ctx, PR_1_EXTENT_BAD, pctx)) { + ext2fs_extent_remove(eh, ex); + i--; ex--; /* check next (moved) item */ + changed++; + continue; + } else { + bad++; + } + } + + ex_prev = ex; + } + } else { + struct ext3_extent_idx *ix =EXT_FIRST_INDEX(eh), *ix_prev =NULL; + + for (i = 0; i < eh->eh_entries; i++, ix++) { + /* FIXME: 48-bit check for s_blocks_count_hi */ + if (ix->ei_leaf_hi && fix_problem(ctx, PR_1_EXTENT_HI, + pctx)) { + ix->ei_leaf_hi = ix->ei_unused = 0; + changed++; + } + + if (ext2fs_extent_index_verify(ctx->fs, ix, ix_prev)) { + pctx->blkcount = ix->ei_leaf;; + pctx->num = i; + pctx->blk = ix->ei_block; + if (fix_problem(ctx, PR_1_EXTENT_IDX_BAD,pctx)){ + ext2fs_extent_index_remove(eh, ix); + i--; ix--; /* check next (moved) item */ + changed++; + continue; + } else { + bad++; + } + } + + ix_prev = ix; + } + } + + if ((eh->eh_entries < 8 && bad > 2) || bad > 6) + return PR_1_EXTENT_BAD; + + if (changed) + return PR_1_EXTENT_HI; + + return 0; +} + /* * This subroutine is called on each inode to account for all of the * blocks used by that inode. @@ -1385,6 +1566,7 @@ pb.suppress = 0; pb.clear = 0; pb.fragmented = 0; pb.compressed = 0; + pb.extent = !!(inode->i_flags & EXT4_EXTENTS_FL); pb.previous_block = 0; pb.is_dir = LINUX_S_ISDIR(inode->i_mode); pb.is_reg = LINUX_S_ISREG(inode->i_mode); @@ -1392,6 +1574,7 @@ pb.inode = inode; pb.pctx = pctx; pb.ctx = ctx; + pb.block_buf = block_buf; pctx->ino = ino; pctx->errcode = 0; @@ -1410,10 +1593,27 @@ if (inode->i_file_acl && check_ext_attr(ctx, pctx, block_buf)) pb.num_blocks++; - if (ext2fs_inode_has_valid_blocks(inode)) - pctx->errcode = ext2fs_block_iterate2(fs, ino, - pb.is_dir ? BLOCK_FLAG_HOLE : 0, - block_buf, process_block, &pb); + if (ext2fs_inode_has_valid_blocks(inode)) { + int problem = 0; + + if (pb.extent) + problem = e2fsck_ext_block_verify(&pb, inode->i_block, + sizeof(inode->i_block)); + else + problem = e2fsck_ind_block_verify(&pb, inode->i_block, + sizeof(inode->i_block)); + if (problem == PR_1_EXTENT_HI) { + dirty_inode++; + problem = 0; + } + + if (problem && fix_problem(ctx, problem, pctx)) + pb.clear = 1; + else + pctx->errcode = ext2fs_block_iterate2(fs, ino, + pb.is_dir ? BLOCK_FLAG_HOLE : 0, + block_buf, process_block, &pb); + } end_problem_latch(ctx, PR_LATCH_BLOCK); end_problem_latch(ctx, PR_LATCH_TOOBIG); if (ctx->flags & E2F_FLAG_SIGNAL_MASK) @@ -1572,6 +1772,9 @@ } #endif +#define IND_BLKCNT(_b) ((_b) == BLOCK_COUNT_IND || (_b) == BLOCK_COUNT_DIND ||\ + (_b) == BLOCK_COUNT_TIND) + /* * This is a helper function for check_blocks(). */ @@ -1650,7 +1853,8 @@ * file be contiguous. (Which can never be true for really * big files that are greater than a block group.) */ - if (!HOLE_BLKADDR(p->previous_block)) { + if (!HOLE_BLKADDR(p->previous_block) && + !(p->extent && IND_BLKCNT(blockcnt))) { if (p->previous_block+1 != blk) p->fragmented = 1; } @@ -1667,6 +1871,32 @@ blk >= fs->super->s_blocks_count) problem = PR_1_ILLEGAL_BLOCK_NUM; + if (!problem && IND_BLKCNT(blockcnt) && p->ino != EXT2_RESIZE_INO) { + if (p->extent) { + problem = ext2fs_read_ext_block(ctx->fs, blk, + p->block_buf); + if (problem) + problem = PR_1_BLOCK_ITERATE; + else + problem = e2fsck_ext_block_verify(p, + p->block_buf, + fs->blocksize); + if (problem == PR_1_EXTENT_HI) + problem = ext2fs_write_ext_block(ctx->fs, blk, + p->block_buf); + + } else { + problem = ext2fs_read_ind_block(ctx->fs, blk, + p->block_buf); + if (problem) + problem = PR_1_BLOCK_ITERATE; + else + problem = e2fsck_ind_block_verify(p, + p->block_buf, + fs->blocksize); + } + } + if (problem) { p->num_illegal_blocks++; if (!p->suppress && (p->num_illegal_blocks % 12) == 0) { @@ -1890,6 +2120,7 @@ { ext2_filsys fs = ctx->fs; blk_t old_block = *new_block; + blk_t last_block; int i; char *buf; struct problem_context pctx; @@ -1900,8 +2131,8 @@ pctx.blk = old_block; pctx.str = name; - pctx.errcode = ext2fs_get_free_blocks(fs, first_block, - first_block + fs->super->s_blocks_per_group, + last_block = ext2fs_group_last_block(fs, group); + pctx.errcode = ext2fs_get_free_blocks(fs, first_block, last_block, num, ctx->block_found_map, new_block); if (pctx.errcode) { pctx.num = num; @@ -1952,9 +2183,11 @@ { ext2_filsys fs = ctx->fs; dgrp_t i; - int first_block = fs->super->s_first_data_block; + blk_t first_block; for (i = 0; i < fs->group_desc_count; i++) { + first_block = ext2fs_group_first_block(fs, i); + if (ctx->invalid_block_bitmap_flag[i]) { new_table_block(ctx, first_block, i, _("block bitmap"), 1, &fs->group_desc[i].bg_block_bitmap); @@ -1969,7 +2202,6 @@ &fs->group_desc[i].bg_inode_table); ctx->flags |= E2F_FLAG_RESTART; } - first_block += fs->super->s_blocks_per_group; } ctx->invalid_bitmaps = 0; } @@ -1981,14 +2213,13 @@ static void mark_table_blocks(e2fsck_t ctx) { ext2_filsys fs = ctx->fs; - blk_t block, b; + blk_t b; dgrp_t i; int j; struct problem_context pctx; clear_problem_context(&pctx); - block = fs->super->s_first_data_block; for (i = 0; i < fs->group_desc_count; i++) { pctx.group = i; @@ -2049,7 +2280,6 @@ fs->group_desc[i].bg_inode_bitmap); } } - block += fs->super->s_blocks_per_group; } } diff -Nru e2fsprogs-1.39/e2fsck/pass2.c e2fsprogs-1.39-tyt1/e2fsck/pass2.c --- e2fsprogs-1.39/e2fsck/pass2.c 2006-03-18 21:34:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/e2fsck/pass2.c 2006-10-06 23:42:54.000000000 -0400 @@ -280,7 +280,18 @@ ext2fs_mark_super_dirty(fs); } } - + +#if 0 /* Don't clear the extent flag */ + if (!ctx->extent_files && + (sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS)) { + if (fs->flags & EXT2_FLAG_RW) { + sb->s_feature_incompat &= + ~EXT3_FEATURE_INCOMPAT_EXTENTS; + ext2fs_mark_super_dirty(fs); + } + } +#endif + #ifdef RESOURCE_TRACK if (ctx->options & E2F_OPT_TIME2) { e2fsck_clear_progbar(ctx); diff -Nru e2fsprogs-1.39/e2fsck/pass4.c e2fsprogs-1.39-tyt1/e2fsck/pass4.c --- e2fsprogs-1.39/e2fsck/pass4.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/e2fsck/pass4.c 2006-10-06 23:42:52.000000000 -0400 @@ -110,8 +110,9 @@ if (ctx->progress) if ((ctx->progress)(ctx, 4, 0, maxgroup)) return; - - for (i=1; i <= fs->super->s_inodes_count; i++) { + + /* Protect loop from wrap-around if s_inodes_count maxed */ + for (i=1; i <= fs->super->s_inodes_count && i > 0; i++) { if (ctx->flags & E2F_FLAG_SIGNAL_MASK) return; if ((i % fs->super->s_inodes_per_group) == 0) { diff -Nru e2fsprogs-1.39/e2fsck/pass5.c e2fsprogs-1.39-tyt1/e2fsck/pass5.c --- e2fsprogs-1.39/e2fsck/pass5.c 2006-05-08 12:54:55.000000000 -0400 +++ e2fsprogs-1.39-tyt1/e2fsck/pass5.c 2006-10-06 23:42:52.000000000 -0400 @@ -370,7 +370,8 @@ EXT2_BG_INODE_UNINIT)) skip_group++; - for (i = 1; i <= fs->super->s_inodes_count; i++) { + /* Protect loop from wrap-around if inodes_count is maxed */ + for (i = 1; i <= fs->super->s_inodes_count && i > 0; i++) { actual = ext2fs_fast_test_inode_bitmap(ctx->inode_used_map, i); if (skip_group) bitmap = 0; @@ -528,8 +529,9 @@ } if (save_inodes_count == end) return; - - for (i = save_inodes_count + 1; i <= end; i++) { + + /* protect loop from wrap-around if end is maxed */ + for (i = save_inodes_count + 1; i <= end && i > save_inodes_count; i++) { if (!ext2fs_test_inode_bitmap(fs->inode_map, i)) { if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx)) { for (i = save_inodes_count + 1; i <= end; i++) @@ -572,8 +574,9 @@ } if (save_blocks_count == end) return; - - for (i = save_blocks_count + 1; i <= end; i++) { + + /* Protect loop from wrap-around if end is maxed */ + for (i = save_blocks_count + 1; i <= end && i > save_blocks_count; i++) { if (!ext2fs_test_block_bitmap(fs->block_map, i)) { if (fix_problem(ctx, PR_5_BLOCK_BMAP_PADDING, &pctx)) { for (i = save_blocks_count + 1; i <= end; i++) diff -Nru e2fsprogs-1.39/e2fsck/problem.c e2fsprogs-1.39-tyt1/e2fsck/problem.c --- e2fsprogs-1.39/e2fsck/problem.c 2006-03-08 22:02:50.000000000 -0500 +++ e2fsprogs-1.39-tyt1/e2fsck/problem.c 2006-10-06 23:42:54.000000000 -0400 @@ -774,6 +774,46 @@ N_("@a in @i %i has a hash (%N) which is @n (must be 0)\n"), PROMPT_CLEAR, PR_PREEN_OK }, + /* indirect block corrupt */ + { PR_1_INDIRECT_BAD, + N_("@i %i has corrupt indirect block\n"), + PROMPT_CLEAR, PR_PREEN_OK }, + + /* inode has extents, superblock missing INCOMPAT_EXTENTS feature */ + { PR_1_EXTENT_FEATURE, + N_("@i %i is in extent format, but @S is missing EXTENTS feature\n"), + PROMPT_FIX, PR_PREEN_OK }, + + /* inode has EXTENTS_FL set, but is not an extent inode */ + { PR_1_SET_EXTENT_FL, + N_("@i %i has EXTENT_FL set, but is not in extents format\n"), + PROMPT_FIX, PR_PREEN_OK }, + + /* inode missing EXTENTS_FL, but is an extent inode */ + { PR_1_UNSET_EXTENT_FL, + N_("@i %i missing EXTENT_FL, but is in extents format\n"), + PROMPT_FIX, PR_PREEN_OK }, + + /* extent index corrupt */ + { PR_1_EXTENT_BAD, + N_("@i %i has corrupt extent at @b %b (logical %B) length %N\n"), + PROMPT_CLEAR, PR_PREEN_OK }, + + /* extent index corrupt */ + { PR_1_EXTENT_IDX_BAD, + N_("@i %i has corrupt extent index at @b %b (logical %B) entry %N\n"), + PROMPT_CLEAR, PR_PREEN_OK }, + + /* extent has high 16 bits set */ + { PR_1_EXTENT_HI, + N_("High 16 bits of extent/index block set\n"), + PROMPT_CLEAR, PR_LATCH_EXTENT_HI | PR_PREEN_OK | PR_NO_OK }, + + /* extent has high 16 bits set header */ + { PR_1_EXTENT_HI_LATCH, + N_("@i %i has high 16 bits of extent/index block set\n"), + PROMPT_CLEAR, PR_PREEN_OK | PR_NO_OK }, + /* Pass 1b errors */ /* Pass 1B: Rescan for duplicate/bad blocks */ @@ -1498,6 +1538,7 @@ { PR_LATCH_LOW_DTIME, PR_1_ORPHAN_LIST_REFUGEES, 0 }, { PR_LATCH_TOOBIG, PR_1_INODE_TOOBIG, 0 }, { PR_LATCH_OPTIMIZE_DIR, PR_3A_OPTIMIZE_DIR_HEADER, PR_3A_OPTIMIZE_DIR_END }, + { PR_LATCH_EXTENT_HI, PR_1_EXTENT_HI_LATCH, 0 }, { -1, 0, 0 }, }; diff -Nru e2fsprogs-1.39/e2fsck/problem.h e2fsprogs-1.39-tyt1/e2fsck/problem.h --- e2fsprogs-1.39/e2fsck/problem.h 2006-03-08 21:58:28.000000000 -0500 +++ e2fsprogs-1.39-tyt1/e2fsck/problem.h 2006-10-06 23:42:54.000000000 -0400 @@ -38,6 +38,7 @@ #define PR_LATCH_LOW_DTIME 0x0070 /* Latch for pass1 orphaned list refugees */ #define PR_LATCH_TOOBIG 0x0080 /* Latch for file to big errors */ #define PR_LATCH_OPTIMIZE_DIR 0x0090 /* Latch for optimize directories */ +#define PR_LATCH_EXTENT_HI 0x00A0 /* Latch for optimize directories */ #define PR_LATCH(x) ((((x) & PR_LATCH_MASK) >> 4) - 1) @@ -449,6 +450,30 @@ /* wrong EA hash value */ #define PR_1_ATTR_HASH 0x010054 +/* indirect block corrupt */ +#define PR_1_INDIRECT_BAD 0x010059 + +/* wrong EXT3_FEATURE_INCOMPAT_EXTENTS flag */ +#define PR_1_EXTENT_FEATURE 0x010060 + +/* EXT3_EXTENT_FL flag set on non-extent file */ +#define PR_1_SET_EXTENT_FL 0x010061 + +/* EXT3_EXTENT_FL flag not set extent file */ +#define PR_1_UNSET_EXTENT_FL 0x010062 + +/* extent index corrupt */ +#define PR_1_EXTENT_BAD 0x010063 + +/* extent index corrupt */ +#define PR_1_EXTENT_IDX_BAD 0x010064 + +/* extent/index has high 16 bits set - header */ +#define PR_1_EXTENT_HI 0x010065 + +/* extent/index has high 16 bits set */ +#define PR_1_EXTENT_HI_LATCH 0x010066 + /* * Pass 1b errors */ diff -Nru e2fsprogs-1.39/e2fsck/recovery.c e2fsprogs-1.39-tyt1/e2fsck/recovery.c --- e2fsprogs-1.39/e2fsck/recovery.c 2006-05-14 16:48:09.000000000 -0400 +++ e2fsprogs-1.39-tyt1/e2fsck/recovery.c 2006-10-06 23:42:52.000000000 -0400 @@ -236,7 +236,7 @@ if (!sb->s_start) { jbd_debug(1, "No recovery required, last transaction %d\n", - ntohl(sb->s_sequence)); + (int)ntohl(sb->s_sequence)); journal->j_transaction_sequence = ntohl(sb->s_sequence) + 1; return 0; } diff -Nru e2fsprogs-1.39/e2fsck/super.c e2fsprogs-1.39-tyt1/e2fsck/super.c --- e2fsprogs-1.39/e2fsck/super.c 2006-03-18 21:33:56.000000000 -0500 +++ e2fsprogs-1.39-tyt1/e2fsck/super.c 2006-10-06 23:42:52.000000000 -0400 @@ -220,7 +220,7 @@ } if (retval) { com_err("release_inode_blocks", retval, - _("while calling ext2fs_adjust_ea_refocunt for inode %d"), + _("while calling ext2fs_adjust_ea_refcount for inode %d"), ino); return 1; } @@ -566,15 +566,15 @@ * Verify the group descriptors.... */ first_block = sb->s_first_data_block; - last_block = first_block + blocks_per_group; for (i = 0, gd=fs->group_desc; i < fs->group_desc_count; i++, gd++) { pctx.group = i; - - if (i == fs->group_desc_count - 1) - last_block = sb->s_blocks_count; + + first_block = ext2fs_group_first_block(fs, i); + last_block = ext2fs_group_last_block(fs, i); + if ((gd->bg_block_bitmap < first_block) || - (gd->bg_block_bitmap >= last_block)) { + (gd->bg_block_bitmap > last_block)) { pctx.blk = gd->bg_block_bitmap; if (fix_problem(ctx, PR_0_BB_NOT_GROUP, &pctx)) gd->bg_block_bitmap = 0; @@ -584,7 +584,7 @@ ctx->invalid_bitmaps++; } if ((gd->bg_inode_bitmap < first_block) || - (gd->bg_inode_bitmap >= last_block)) { + (gd->bg_inode_bitmap > last_block)) { pctx.blk = gd->bg_inode_bitmap; if (fix_problem(ctx, PR_0_IB_NOT_GROUP, &pctx)) gd->bg_inode_bitmap = 0; @@ -595,7 +595,7 @@ } if ((gd->bg_inode_table < first_block) || ((gd->bg_inode_table + - fs->inode_blocks_per_group - 1) >= last_block)) { + fs->inode_blocks_per_group - 1) > last_block)) { pctx.blk = gd->bg_inode_table; if (fix_problem(ctx, PR_0_ITABLE_NOT_GROUP, &pctx)) gd->bg_inode_table = 0; @@ -606,8 +606,6 @@ } free_blocks += gd->bg_free_blocks_count; free_inodes += gd->bg_free_inodes_count; - first_block += sb->s_blocks_per_group; - last_block += sb->s_blocks_per_group; if ((gd->bg_free_blocks_count > sb->s_blocks_per_group) || (gd->bg_free_inodes_count > sb->s_inodes_per_group) || diff -Nru e2fsprogs-1.39/e2fsck/unix.c e2fsprogs-1.39-tyt1/e2fsck/unix.c --- e2fsprogs-1.39/e2fsck/unix.c 2006-03-19 20:31:06.000000000 -0500 +++ e2fsprogs-1.39-tyt1/e2fsck/unix.c 2006-10-06 23:42:52.000000000 -0400 @@ -98,7 +98,7 @@ static void show_stats(e2fsck_t ctx) { ext2_filsys fs = ctx->fs; - int inodes, inodes_used; + ext2_ino_t inodes, inodes_used; blk_t blocks, blocks_used; int dir_links; int num_files, num_links; @@ -118,49 +118,48 @@ frag_percent = (frag_percent + 5) / 10; if (!verbose) { - printf(_("%s: %d/%d files (%0d.%d%% non-contiguous), %u/%u blocks\n"), + printf(_("%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"), ctx->device_name, inodes_used, inodes, frag_percent / 10, frag_percent % 10, blocks_used, blocks); return; } - printf (P_("\n%8d inode used (%d%%)\n", "\n%8d inodes used (%d%%)\n", - inodes_used), inodes_used, 100 * inodes_used / inodes); - printf (P_("%8d non-contiguous inode (%0d.%d%%)\n", - "%8d non-contiguous inodes (%0d.%d%%)\n", + printf (P_("\n%8u inode used (%2.2f%%)\n", "\n%8u inodes used (%2.2f%%)\n", + inodes_used), inodes_used, 100.0 * inodes_used / inodes); + printf (P_("%8u non-contiguous inode (%0d.%d%%)\n", + "%8u non-contiguous inodes (%0d.%d%%)\n", ctx->fs_fragmented), ctx->fs_fragmented, frag_percent / 10, frag_percent % 10); - printf (_(" # of inodes with ind/dind/tind blocks: %d/%d/%d\n"), + printf (_(" # of inodes with ind/dind/tind blocks: %u/%u/%u\n"), ctx->fs_ind_count, ctx->fs_dind_count, ctx->fs_tind_count); - printf (P_("%8u block used (%d%%)\n", "%8u blocks used (%d%%)\n", - blocks_used), - blocks_used, (int) ((long long) 100 * blocks_used / blocks)); - printf (P_("%8d bad block\n", "%8d bad blocks\n", + printf (P_("%8u block used (%2.2f%%)\n", "%8u blocks used (%2.2f%%)\n", + blocks_used), blocks_used, 100.0 * blocks_used / blocks); + printf (P_("%8u bad block\n", "%8u bad blocks\n", ctx->fs_badblocks_count), ctx->fs_badblocks_count); - printf (P_("%8d large file\n", "%8d large files\n", + printf (P_("%8u large file\n", "%8u large files\n", ctx->large_files), ctx->large_files); - printf (P_("\n%8d regular file\n", "\n%8d regular files\n", + printf (P_("\n%8u regular file\n", "\n%8u regular files\n", ctx->fs_regular_count), ctx->fs_regular_count); - printf (P_("%8d directory\n", "%8d directories\n", + printf (P_("%8u directory\n", "%8u directories\n", ctx->fs_directory_count), ctx->fs_directory_count); - printf (P_("%8d character device file\n", - "%8d character device files\n", ctx->fs_chardev_count), + printf (P_("%8u character device file\n", + "%8u character device files\n", ctx->fs_chardev_count), ctx->fs_chardev_count); - printf (P_("%8d block device file\n", "%8d block device files\n", + printf (P_("%8u block device file\n", "%8u block device files\n", ctx->fs_blockdev_count), ctx->fs_blockdev_count); - printf (P_("%8d fifo\n", "%8d fifos\n", ctx->fs_fifo_count), + printf (P_("%8u fifo\n", "%8u fifos\n", ctx->fs_fifo_count), ctx->fs_fifo_count); - printf (P_("%8d link\n", "%8d links\n", + printf (P_("%8u link\n", "%8u links\n", ctx->fs_links_count - dir_links), ctx->fs_links_count - dir_links); - printf (P_("%8d symbolic link", "%8d symbolic links", + printf (P_("%8u symbolic link", "%8u symbolic links", ctx->fs_symlinks_count), ctx->fs_symlinks_count); - printf (P_(" (%d fast symbolic link)\n", " (%d fast symbolic links)\n", + printf (P_(" (%u fast symbolic link)\n", " (%u fast symbolic links)\n", ctx->fs_fast_symlinks_count), ctx->fs_fast_symlinks_count); - printf (P_("%8d socket\n", "%8d sockets\n", ctx->fs_sockets_count), + printf (P_("%8u socket\n", "%8u sockets\n", ctx->fs_sockets_count), ctx->fs_sockets_count); printf ("--------\n"); - printf (P_("%8d file\n", "%8d files\n", + printf (P_("%8u file\n", "%8u files\n", ctx->fs_total_count - dir_links), ctx->fs_total_count - dir_links); } @@ -300,7 +299,7 @@ fputs(_(", check forced.\n"), stdout); return; } - printf(_("%s: clean, %d/%d files, %u/%u blocks"), ctx->device_name, + printf(_("%s: clean, %u/%u files, %u/%u blocks"), ctx->device_name, fs->super->s_inodes_count - fs->super->s_free_inodes_count, fs->super->s_inodes_count, fs->super->s_blocks_count - fs->super->s_free_blocks_count, @@ -568,7 +567,7 @@ exit(FSCK_ERROR); } -static const char *config_fn[] = { "/etc/e2fsck.conf", 0 }; +static const char *config_fn[] = { ROOT_SYSCONFDIR "/e2fsck.conf", 0 }; static errcode_t PRS(int argc, char *argv[], e2fsck_t *ret_ctx) { diff -Nru e2fsprogs-1.39/e2fsprogs.spec.in e2fsprogs-1.39-tyt1/e2fsprogs.spec.in --- e2fsprogs-1.39/e2fsprogs.spec.in 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/e2fsprogs.spec.in 2006-10-06 23:42:52.000000000 -0400 @@ -6,7 +6,7 @@ Name: e2fsprogs Version: @E2FSPROGS_VERSION@ Release: 0 -Copyright: GPL +License: GPLv2 Group: System Environment/Base Source: ftp://download.sourceforge.net/pub/sourceforge/e2fsprogs/e2fsprogs-%{version}.tar.gz Url: http://e2fsprogs.sourceforge.net/ @@ -181,7 +181,6 @@ %{_includedir}/ext2fs %{_includedir}/ss %{_includedir}/uuid -%{_includedir}/e2p/e2p.h %{_mandir}/man1/compile_et.1* %{_mandir}/man1/mk_cmds.1* %{_mandir}/man3/com_err.3* diff -Nru e2fsprogs-1.39/ext2ed/ChangeLog e2fsprogs-1.39-tyt1/ext2ed/ChangeLog --- e2fsprogs-1.39/ext2ed/ChangeLog 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/ext2ed/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,8 @@ +2006-08-30 Theodore Tso + + * init.c (div_ceil, set_file_system_info): Fix potential overflow + for really big filesystems. + 2006-06-30 Theodore Ts'o * Release of E2fsprogs 1.38 diff -Nru e2fsprogs-1.39/ext2ed/init.c e2fsprogs-1.39-tyt1/ext2ed/init.c --- e2fsprogs-1.39/ext2ed/init.c 2005-12-09 19:00:32.000000000 -0500 +++ e2fsprogs-1.39-tyt1/ext2ed/init.c 2006-10-06 23:42:52.000000000 -0400 @@ -370,6 +370,13 @@ ptr->callback [num]=callback; } +static unsigned int div_ceil(unsigned int a, unsigned int b) +{ + if (!a) + return 0; + return ((a - 1) / b) + 1; +} + int set_file_system_info (void) { @@ -415,8 +422,8 @@ file_system_info.first_group_desc_offset=2*EXT2_MIN_BLOCK_SIZE; else file_system_info.first_group_desc_offset=file_system_info.block_size; - file_system_info.groups_count=( sb->s_blocks_count-sb->s_first_data_block+sb->s_blocks_per_group-1) / - sb->s_blocks_per_group; + file_system_info.groups_count = div_ceil(sb->s_blocks_count, + sb->s_blocks_per_group); file_system_info.inodes_per_block=file_system_info.block_size/sizeof (struct ext2_inode); file_system_info.blocks_per_group=sb->s_inodes_per_group/file_system_info.inodes_per_block; diff -Nru e2fsprogs-1.39/lib/blkid/ChangeLog e2fsprogs-1.39-tyt1/lib/blkid/ChangeLog --- e2fsprogs-1.39/lib/blkid/ChangeLog 2006-05-14 17:25:12.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/blkid/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,28 @@ +2006-09-24 Theodore Tso + + * devno.c (scan_dir): Don't follow symlinks when recursively + searching directories under /dev. + +2006-09-17 Karel Zak + + * probe.c (probe_fat): Fix problem with empty FAT label. + +2006-09-17 Karel Zak + + * probe.c (probe_gfs, _gfs2), probe.h: Add support for GFS/GFS2 + +2006-09-12 Theodore Tso + + * devname.c (dm_probe_all): probe_one expects device names passed + to it w/o the leading "/dev". + +2006-08-19 Andreas Dilger + + * blkid.8.in: Make the description of the -l option more accurate. + + * Makefile.in (clean): Avoid removing the tst_*.c files, but + instead list each of the tst_* binaries explicitly. + 2006-05-14 Theodore Tso * probe.c (probe_udf): Fix signed vs. unsigned lint warning; diff -Nru e2fsprogs-1.39/lib/blkid/dev.c e2fsprogs-1.39-tyt1/lib/blkid/dev.c --- e2fsprogs-1.39/lib/blkid/dev.c 2006-03-12 18:10:44.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/blkid/dev.c 2006-10-06 23:42:52.000000000 -0400 @@ -68,8 +68,8 @@ } printf(" dev: name = %s\n", dev->bid_name); - printf(" dev: DEVNO=\"0x%0llx\"\n", dev->bid_devno); - printf(" dev: TIME=\"%ld\"\n", dev->bid_time); + printf(" dev: DEVNO=\"0x%0llx\"\n", (long long)dev->bid_devno); + printf(" dev: TIME=\"%ld\"\n", (long)dev->bid_time); printf(" dev: PRI=\"%d\"\n", dev->bid_pri); printf(" dev: flags = 0x%08X\n", dev->bid_flags); @@ -196,7 +196,7 @@ void usage(char *prog) { fprintf(stderr, "Usage: %s [-f blkid_file] [-m debug_mask]\n", prog); - fprintf(stderr, "\tList all devices and exit\n", prog); + fprintf(stderr, "\tList all devices and exit\n"); exit(1); } @@ -219,7 +219,7 @@ case 'm': blkid_debug_mask = strtoul (optarg, &tmp, 0); if (*tmp) { - fprintf(stderr, "Invalid debug mask: %d\n", + fprintf(stderr, "Invalid debug mask: %s\n", optarg); exit(1); } diff -Nru e2fsprogs-1.39/lib/blkid/devname.c e2fsprogs-1.39-tyt1/lib/blkid/devname.c --- e2fsprogs-1.39/lib/blkid/devname.c 2006-03-19 14:53:35.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/blkid/devname.c 2006-10-06 23:42:52.000000000 -0400 @@ -291,7 +291,7 @@ names = (void *)names + next; - rc = asprintf(&device, "/dev/mapper/%s", names->name); + rc = asprintf(&device, "mapper/%s", names->name); if (rc < 0) goto try_next; diff -Nru e2fsprogs-1.39/lib/blkid/devno.c e2fsprogs-1.39-tyt1/lib/blkid/devno.c --- e2fsprogs-1.39/lib/blkid/devno.c 2006-01-27 23:42:34.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/blkid/devno.c 2006-10-06 23:42:52.000000000 -0400 @@ -120,15 +120,16 @@ if (stat(path, &st) < 0) continue; - if (S_ISDIR(st.st_mode)) - add_to_dirlist(path, list); - else if (S_ISBLK(st.st_mode) && st.st_rdev == devno) { + if (S_ISBLK(st.st_mode) && st.st_rdev == devno) { *devname = blkid_strdup(path); DBG(DEBUG_DEVNO, - printf("found 0x%llx at %s (%p)\n", devno, + printf("found 0x%llx at %s (%p)\n", (long long)devno, path, *devname)); break; } + if (S_ISDIR(st.st_mode) && !lstat(path, &st) && + S_ISDIR(st.st_mode)) + add_to_dirlist(path, list); } closedir(dir); return; @@ -183,7 +184,7 @@ (unsigned long) devno)); } else { DBG(DEBUG_DEVNO, - printf("found devno 0x%04llx as %s\n", devno, devname)); + printf("found devno 0x%04llx as %s\n", (long long)devno, devname)); } @@ -224,7 +225,7 @@ } devno = makedev(major, minor); } - printf("Looking for device 0x%04Lx\n", devno); + printf("Looking for device 0x%04llx\n", (long long)devno); devname = blkid_devno_to_devname(devno); if (devname) free(devname); diff -Nru e2fsprogs-1.39/lib/blkid/getsize.c e2fsprogs-1.39-tyt1/lib/blkid/getsize.c --- e2fsprogs-1.39/lib/blkid/getsize.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/blkid/getsize.c 2006-10-06 23:42:52.000000000 -0400 @@ -70,7 +70,7 @@ } /* - * Returns the number of blocks in a partition + * Returns the number of bytes in a partition */ blkid_loff_t blkid_get_dev_size(int fd) { @@ -122,25 +122,33 @@ return (blkid_loff_t)size << 9; #endif +/* tested on FreeBSD 6.1-RELEASE i386 */ +#ifdef DIOCGMEDIASIZE + if (ioctl(fd, DIOCGMEDIASIZE, &size64) >= 0) + return (off_t)size64; +#endif /* DIOCGMEDIASIZE */ + #ifdef FDGETPRM if (ioctl(fd, FDGETPRM, &this_floppy) >= 0) return (blkid_loff_t)this_floppy.size << 9; #endif #ifdef HAVE_SYS_DISKLABEL_H -#if 0 /* - * This should work in theory but I haven't tested it. Anyone - * on a BSD system want to test this for me? In the meantime, - * binary search mechanism should work just fine. + * This code works for FreeBSD 4.11 i386, except for the full device + * (such as /dev/ad0). It doesn't work properly for newer FreeBSD + * though. FreeBSD >= 5.0 should be covered by the DIOCGMEDIASIZE + * above however. + * + * Note that FreeBSD >= 4.0 has disk devices as unbuffered (raw, + * character) devices, so we need to check for S_ISCHR, too. */ - if ((fstat(fd, &st) >= 0) && S_ISBLK(st.st_mode)) + if ((fstat(fd, &st) >= 0) && (S_ISBLK(st.st_mode) || S_ISCHR(st.st_mode))) part = st.st_rdev & 7; if (part >= 0 && (ioctl(fd, DIOCGDINFO, (char *)&lab) >= 0)) { pp = &lab.d_partitions[part]; if (pp->p_size) return pp->p_size << 9; } -#endif #endif /* HAVE_SYS_DISKLABEL_H */ { #ifdef HAVE_FSTAT64 diff -Nru e2fsprogs-1.39/lib/blkid/Makefile.in e2fsprogs-1.39-tyt1/lib/blkid/Makefile.in --- e2fsprogs-1.39/lib/blkid/Makefile.in 2006-04-08 21:52:52.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/blkid/Makefile.in 2006-10-06 23:42:52.000000000 -0400 @@ -175,7 +175,9 @@ done clean:: - $(RM) -f \#* *.s *.o *.orig *.a *~ *.bak tst_* tests/*.out tests/*.ok \ + $(RM) -f \#* *.s *.o *.orig *.a *~ *.bak tst_cache tst_dev tst_devname \ + tst_devno tst_getsize tst_probe tst_read tst_resolve tst_save \ + tst_tag tst_types tests/*.out tests/*.ok \ tests/*.img results test_probe core profiled/* \ checker/* blkid_types.h ../libblkid.a ../libblkid_p.a \ $(SMANPAGES) blkid diff -Nru e2fsprogs-1.39/lib/blkid/probe.c e2fsprogs-1.39-tyt1/lib/blkid/probe.c --- e2fsprogs-1.39/lib/blkid/probe.c 2006-05-14 17:24:09.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/blkid/probe.c 2006-10-06 23:42:52.000000000 -0400 @@ -153,7 +153,6 @@ unsigned char *buf) { struct ext2_super_block *es; - char uuid[37]; es = (struct ext2_super_block *)buf; /* Distinguish between jbd and ext2/3 fs */ @@ -225,7 +224,7 @@ static unsigned char *search_fat_label(struct vfat_dir_entry *dir, int count) { - unsigned int i; + int i; for (i = 0; i < count; i++) { if (dir[i].name[0] == 0x00) @@ -254,7 +253,7 @@ struct msdos_super_block *ms = (struct msdos_super_block *) buf; struct vfat_dir_entry *dir; char serno[10]; - const unsigned char *label = 0, *vol_label = 0; + const unsigned char *label = 0, *vol_label = 0, *tmp; unsigned char *vol_serno; int label_len = 0, maxloop = 100; __u16 sector_size, dir_entries, reserved; @@ -262,14 +261,17 @@ __u32 buf_size, start_data_sect, next, root_start, root_dir_entries; /* sector size check */ - sector_size = blkid_le16(*((__u16 *) &ms->ms_sector_size)); + tmp = (unsigned char *)&ms->ms_sector_size; + sector_size = tmp[0] + (tmp[1] << 8); if (sector_size != 0x200 && sector_size != 0x400 && sector_size != 0x800 && sector_size != 0x1000) return 1; - dir_entries = blkid_le16(*((__u16 *) &ms->ms_dir_entries)); + tmp = (unsigned char *)&ms->ms_dir_entries; + dir_entries = tmp[0] + (tmp[1] << 8); reserved = blkid_le16(ms->ms_reserved); - sect_count = blkid_le16(*((__u16 *) &ms->ms_sectors)); + tmp = (unsigned char *)&ms->ms_sectors; + sect_count = tmp[0] + (tmp[1] << 8); if (sect_count == 0) sect_count = blkid_le32(ms->ms_total_sect); @@ -348,8 +350,8 @@ } if (vol_label && memcmp(vol_label, no_name, 11)) { - label = vol_label; - label_len = figure_label_len(vol_label, 11); + if ((label_len = figure_label_len(vol_label, 11))) + label = vol_label; } /* We can't just print them as %04X, because they are unaligned */ @@ -646,6 +648,50 @@ return 0; } +static int probe_gfs(struct blkid_probe *probe, + struct blkid_magic *id __BLKID_ATTR((unused)), + unsigned char *buf) +{ + struct gfs2_sb *sbd; + const char *label = 0; + + sbd = (struct gfs2_sb *)buf; + + if (blkid_be32(sbd->sb_fs_format) == GFS_FORMAT_FS && + blkid_be32(sbd->sb_multihost_format) == GFS_FORMAT_MULTI) + { + blkid_set_tag(probe->dev, "UUID", 0, 0); + + if (strlen(sbd->sb_locktable)) + label = sbd->sb_locktable; + blkid_set_tag(probe->dev, "LABEL", label, sizeof(sbd->sb_locktable)); + return 0; + } + return 1; +} + +static int probe_gfs2(struct blkid_probe *probe, + struct blkid_magic *id __BLKID_ATTR((unused)), + unsigned char *buf) +{ + struct gfs2_sb *sbd; + const char *label = 0; + + sbd = (struct gfs2_sb *)buf; + + if (blkid_be32(sbd->sb_fs_format) == GFS2_FORMAT_FS && + blkid_be32(sbd->sb_multihost_format) == GFS2_FORMAT_MULTI) + { + blkid_set_tag(probe->dev, "UUID", 0, 0); + + if (strlen(sbd->sb_locktable)) + label = sbd->sb_locktable; + blkid_set_tag(probe->dev, "LABEL", label, sizeof(sbd->sb_locktable)); + return 0; + } + return 1; +} + /* * BLKID_BLK_OFFS is at least as large as the highest bim_kboff defined * in the type_array table below + bim_kbalign. @@ -673,6 +719,8 @@ { "reiserfs", 64, 0x34, 8, "ReIsErFs", probe_reiserfs }, { "reiserfs", 8, 20, 8, "ReIsErFs", probe_reiserfs }, { "reiser4", 64, 0, 7, "ReIsEr4", probe_reiserfs4 }, + { "gfs2", 64, 0, 4, "\x01\x16\x19\x70", probe_gfs2 }, + { "gfs", 64, 0, 4, "\x01\x16\x19\x70", probe_gfs }, { "vfat", 0, 0x52, 5, "MSWIN", probe_fat }, { "vfat", 0, 0x52, 8, "FAT32 ", probe_fat }, { "vfat", 0, 0x36, 5, "MSDOS", probe_fat }, @@ -765,8 +813,8 @@ return dev; DBG(DEBUG_PROBE, - printf("need to revalidate %s (time since last check %lu)\n", - dev->bid_name, diff)); + printf("need to revalidate %s (time since last check %llu)\n", + dev->bid_name, (unsigned long long)diff)); if (((probe.fd = open(dev->bid_name, O_RDONLY)) < 0) || (fstat(probe.fd, &st) < 0)) { @@ -853,7 +901,7 @@ blkid_set_tag(dev, "TYPE", type, 0); DBG(DEBUG_PROBE, printf("%s: devno 0x%04llx, type %s\n", - dev->bid_name, st.st_rdev, type)); + dev->bid_name, (long long)st.st_rdev, type)); } if (probe.sbbuf) diff -Nru e2fsprogs-1.39/lib/blkid/probe.h e2fsprogs-1.39-tyt1/lib/blkid/probe.h --- e2fsprogs-1.39/lib/blkid/probe.h 2006-03-10 15:43:35.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/blkid/probe.h 2006-10-06 23:42:52.000000000 -0400 @@ -345,6 +345,54 @@ unsigned char escape_sequences[8]; }; +/* Common gfs/gfs2 constants: */ +#define GFS_MAGIC 0x01161970 +#define GFS_DEFAULT_BSIZE 4096 +#define GFS_SUPERBLOCK_OFFSET (0x10 * GFS_DEFAULT_BSIZE) +#define GFS_METATYPE_SB 1 +#define GFS_FORMAT_SB 100 +#define GFS_LOCKNAME_LEN 64 + +/* gfs1 constants: */ +#define GFS_FORMAT_FS 1309 +#define GFS_FORMAT_MULTI 1401 +/* gfs2 constants: */ +#define GFS2_FORMAT_FS 1801 +#define GFS2_FORMAT_MULTI 1900 + +struct gfs2_meta_header { + __u32 mh_magic; + __u32 mh_type; + __u64 __pad0; /* Was generation number in gfs1 */ + __u32 mh_format; + __u32 __pad1; /* Was incarnation number in gfs1 */ +}; + +struct gfs2_inum { + __u64 no_formal_ino; + __u64 no_addr; +}; + +struct gfs2_sb { + struct gfs2_meta_header sb_header; + + __u32 sb_fs_format; + __u32 sb_multihost_format; + __u32 __pad0; /* Was superblock flags in gfs1 */ + + __u32 sb_bsize; + __u32 sb_bsize_shift; + __u32 __pad1; /* Was journal segment size in gfs1 */ + + struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */ + struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */ + struct gfs2_inum sb_root_dir; + + char sb_lockproto[GFS_LOCKNAME_LEN]; + char sb_locktable[GFS_LOCKNAME_LEN]; + /* In gfs1, quota and license dinodes followed */ +}; + /* * Byte swap functions */ @@ -414,7 +462,7 @@ -#if __BYTE_ORDER == __BIG_ENDIAN +#ifdef WORDS_BIGENDIAN #define blkid_le16(x) blkid_swab16(x) #define blkid_le32(x) blkid_swab32(x) #define blkid_le64(x) blkid_swab64(x) diff -Nru e2fsprogs-1.39/lib/blkid/read.c e2fsprogs-1.39-tyt1/lib/blkid/read.c --- e2fsprogs-1.39/lib/blkid/read.c 2006-03-12 18:10:58.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/blkid/read.c 2006-10-06 23:42:52.000000000 -0400 @@ -452,8 +452,8 @@ } printf(" dev: name = %s\n", dev->bid_name); - printf(" dev: DEVNO=\"0x%0llx\"\n", dev->bid_devno); - printf(" dev: TIME=\"%ld\"\n", dev->bid_time); + printf(" dev: DEVNO=\"0x%0llx\"\n", (long long)dev->bid_devno); + printf(" dev: TIME=\"%lld\"\n", (long long)dev->bid_time); printf(" dev: PRI=\"%d\"\n", dev->bid_pri); printf(" dev: flags = 0x%08X\n", dev->bid_flags); diff -Nru e2fsprogs-1.39/lib/blkid/save.c e2fsprogs-1.39-tyt1/lib/blkid/save.c --- e2fsprogs-1.39/lib/blkid/save.c 2006-03-12 18:14:25.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/blkid/save.c 2006-10-06 23:42:52.000000000 -0400 @@ -38,7 +38,7 @@ fprintf(file, "bid_devno, dev->bid_time); + (unsigned long) dev->bid_devno, (long) dev->bid_time); if (dev->bid_pri) fprintf(file, " PRI=\"%d\"", dev->bid_pri); list_for_each(p, &dev->bid_tags) { diff -Nru e2fsprogs-1.39/lib/blkid/tag.c e2fsprogs-1.39-tyt1/lib/blkid/tag.c --- e2fsprogs-1.39/lib/blkid/tag.c 2006-03-10 16:52:19.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/blkid/tag.c 2006-10-06 23:42:52.000000000 -0400 @@ -386,7 +386,7 @@ fprintf(stderr, "Usage: %s [-f blkid_file] [-m debug_mask] device " "[type value]\n", prog); - fprintf(stderr, "\tList all tags for a device and exit\n", prog); + fprintf(stderr, "\tList all tags for a device and exit\n"); exit(1); } @@ -412,7 +412,7 @@ case 'm': blkid_debug_mask = strtoul (optarg, &tmp, 0); if (*tmp) { - fprintf(stderr, "Invalid debug mask: %d\n", + fprintf(stderr, "Invalid debug mask: %s\n", optarg); exit(1); } diff -Nru e2fsprogs-1.39/lib/blkid/test_probe.in e2fsprogs-1.39-tyt1/lib/blkid/test_probe.in --- e2fsprogs-1.39/lib/blkid/test_probe.in 2005-09-10 14:08:42.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/blkid/test_probe.in 2006-10-06 23:42:52.000000000 -0400 @@ -12,7 +12,7 @@ for i in $TESTS do - echo -n "$i: " + printf "%s: " $i if test ! -f $SRCDIR/tests/$i.img.bz2 -a \ ! -f $SRCDIR/tests/$i.results ; then diff -Nru e2fsprogs-1.39/lib/blkid/tst_types.c e2fsprogs-1.39-tyt1/lib/blkid/tst_types.c --- e2fsprogs-1.39/lib/blkid/tst_types.c 2006-04-08 21:53:58.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/blkid/tst_types.c 2006-10-06 23:42:52.000000000 -0400 @@ -11,7 +11,10 @@ #include "blkid/blkid_types.h" -main(int argc, char **argv) +#include +#include + +int main(int argc, char **argv) { if (sizeof(__u8) != 1) { printf("Sizeof(__u8) is %d should be 1\n", diff -Nru e2fsprogs-1.39/lib/ChangeLog e2fsprogs-1.39-tyt1/lib/ChangeLog --- e2fsprogs-1.39/lib/ChangeLog 2006-03-17 21:12:30.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,8 @@ +2006-06-28 Andreas Dilger + + * e2fsck.h, ext2_ext_attr.h: Protect header files from multiple + inclusion. + 2006-03-17 Theodore Ts'o * Makefile.library (real-subdirs): Add real-subdirs:: target so diff -Nru e2fsprogs-1.39/lib/e2p/ChangeLog e2fsprogs-1.39-tyt1/lib/e2p/ChangeLog --- e2fsprogs-1.39/lib/e2p/ChangeLog 2006-05-08 13:25:00.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/e2p/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,18 @@ +2006-09-29 Theodore Tso + + * percent.c (e2p_percent): Fix bug which caused e2p_percent to + crash if the percentage was zero. + +2006-08-30 Theodore Tso + + * percent.c (e2p_percent): Add a new function which accurate and + without risk of overflow calculates a percentage of a base + number. + +2006-08-05 Theodore Tso + + * pf.c: Add support for EXT4_EXTENTS_FL flag. + 2006-05-08 Theodore Tso * feature.c: Add support for EXT2_FEATURE_COMPAT_LAZY_BG feature. diff -Nru e2fsprogs-1.39/lib/e2p/e2p.h e2fsprogs-1.39-tyt1/lib/e2p/e2p.h --- e2fsprogs-1.39/lib/e2p/e2p.h 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/e2p/e2p.h 2006-10-06 23:42:52.000000000 -0400 @@ -50,3 +50,5 @@ char *e2p_os2string(int os_type); int e2p_string2os(char *str); + +unsigned int e2p_percent(int percent, unsigned int base); diff -Nru e2fsprogs-1.39/lib/e2p/Makefile.in e2fsprogs-1.39-tyt1/lib/e2p/Makefile.in --- e2fsprogs-1.39/lib/e2p/Makefile.in 2005-12-29 22:19:32.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/e2p/Makefile.in 2006-10-06 23:42:52.000000000 -0400 @@ -19,7 +19,7 @@ OBJS= feature.o fgetflags.o fsetflags.o fgetversion.o fsetversion.o \ getflags.o getversion.o hashstr.o iod.o ls.o mntopts.o \ parse_num.o pe.o pf.o ps.o setflags.o setversion.o uuid.o \ - ostype.o + ostype.o percent.o SRCS= $(srcdir)/feature.c $(srcdir)/fgetflags.c \ $(srcdir)/fsetflags.c $(srcdir)/fgetversion.c \ @@ -28,7 +28,7 @@ $(srcdir)/ls.c $(srcdir)/mntopts.c $(srcdir)/parse_num.c \ $(srcdir)/pe.c $(srcdir)/pf.c $(srcdir)/ps.c \ $(srcdir)/setflags.c $(srcdir)/setversion.c $(srcdir)/uuid.c \ - $(srcdir)/ostype.c + $(srcdir)/ostype.c $(srcdir)/percent.o HFILES= e2p.h LIBRARY= libe2p diff -Nru e2fsprogs-1.39/lib/e2p/percent.c e2fsprogs-1.39-tyt1/lib/e2p/percent.c --- e2fsprogs-1.39/lib/e2p/percent.c 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/e2p/percent.c 2006-10-06 23:42:52.000000000 -0400 @@ -0,0 +1,64 @@ +/* + * percent.c - Take percentage of a number + * + * Copyright (C) 2006 Theodore Ts'o + * + * This file can be redistributed under the terms of the GNU Library General + * Public License + */ + +#include "e2p.h" + +#include + +/* + * We work really hard to calculate this accurately, while avoiding + * an overflow. "Is there a hyphen in anal-retentive?" :-) + */ +unsigned int e2p_percent(int percent, unsigned int base) +{ + unsigned int mask = ~((1 << (sizeof(unsigned int) - 1) * 8) - 1); + + if (!percent) + return 0; + if (100 % percent == 0) + return base / (100 / percent); + if (mask & base) + return (base / 100) * percent; + return base * percent / 100; +} + +#ifdef DEBUG +#include +#include + +main(int argc, char **argv) +{ + unsigned int base; + int percent; + char *p; + int log_block_size = 0; + + if (argc != 3) { + fprintf(stderr, "Usage: %s percent base\n", argv[0]); + exit(1); + } + + percent = strtoul(argv[1], &p, 0); + if (p[0] && p[1]) { + fprintf(stderr, "Bad percent: %s\n", argv[1]); + exit(1); + } + + base = strtoul(argv[2], &p, 0); + if (p[0] && p[1]) { + fprintf(stderr, "Bad base: %s\n", argv[2]); + exit(1); + } + + printf("%d percent of %u is %u.\n", percent, base, + e2p_percent(percent, base)); + + exit(0); +} +#endif diff -Nru e2fsprogs-1.39/lib/e2p/pf.c e2fsprogs-1.39-tyt1/lib/e2p/pf.c --- e2fsprogs-1.39/lib/e2p/pf.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/e2p/pf.c 2006-10-06 23:42:52.000000000 -0400 @@ -44,6 +44,7 @@ { EXT2_INDEX_FL, "I", "Indexed_direcctory" }, { EXT2_NOTAIL_FL, "t", "No_Tailmerging" }, { EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" }, + { EXT4_EXTENTS_FL, "e", "Extents" }, { 0, NULL, NULL } }; diff -Nru e2fsprogs-1.39/lib/et/ChangeLog e2fsprogs-1.39-tyt1/lib/et/ChangeLog --- e2fsprogs-1.39/lib/et/ChangeLog 2005-12-10 22:18:49.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/et/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,8 @@ +2006-08-05 Theodore Ts'o + + * compile_et.sh.in: Create the generated .c and .h files read-only + to remind developers they shouldn't edit them. + 2005-12-10 Theodore Ts'o * Makefile.in: Add a dependency to make sure that the diff -Nru e2fsprogs-1.39/lib/et/compile_et.sh.in e2fsprogs-1.39-tyt1/lib/et/compile_et.sh.in --- e2fsprogs-1.39/lib/et/compile_et.sh.in 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/et/compile_et.sh.in 2006-10-06 23:42:52.000000000 -0400 @@ -34,13 +34,15 @@ $AWK -f "${DIR}/et_h.awk" "outfile=${BASE}.h.$$" "outfn=${BASE}.h" "$ROOT.et" if test -f ${BASE}.h && cmp -s ${BASE}.h.$$ ${BASE}.h ; then - rm ${BASE}.h.$$ + rm -f ${BASE}.h.$$ else - mv ${BASE}.h.$$ ${BASE}.h + mv -f ${BASE}.h.$$ ${BASE}.h + chmod -w ${BASE}.h fi $AWK -f "${DIR}/et_c.awk" "outfile=${BASE}.c.$$" "outfn=${BASE}.c" "$ROOT.et" if test -f ${BASE}.c && cmp -s ${BASE}.c.$$ ${BASE}.c ; then - rm ${BASE}.c.$$ + rm -f ${BASE}.c.$$ else - mv ${BASE}.c.$$ ${BASE}.c + mv -f ${BASE}.c.$$ ${BASE}.c + chmod -w ${BASE}.c fi diff -Nru e2fsprogs-1.39/lib/ext2fs/alloc_tables.c e2fsprogs-1.39-tyt1/lib/ext2fs/alloc_tables.c --- e2fsprogs-1.39/lib/ext2fs/alloc_tables.c 2006-05-12 21:47:17.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/alloc_tables.c 2006-10-06 23:42:52.000000000 -0400 @@ -34,12 +34,8 @@ blk_t group_blk, start_blk, last_blk, new_blk, blk; int j; - group_blk = fs->super->s_first_data_block + - (group * fs->super->s_blocks_per_group); - - last_blk = group_blk + fs->super->s_blocks_per_group; - if (last_blk >= fs->super->s_blocks_count) - last_blk = fs->super->s_blocks_count - 1; + group_blk = ext2fs_group_first_block(fs, group); + last_blk = ext2fs_group_last_block(fs, group); if (!bmap) bmap = fs->block_map; @@ -54,8 +50,8 @@ return retval; start_blk += fs->inode_blocks_per_group; start_blk += ((fs->stride * group) % - (last_blk - start_blk)); - if (start_blk > last_blk) + (last_blk - start_blk + 1)); + if (start_blk >= last_blk) start_blk = group_blk; } else start_blk = group_blk; diff -Nru e2fsprogs-1.39/lib/ext2fs/bitmaps.c e2fsprogs-1.39-tyt1/lib/ext2fs/bitmaps.c --- e2fsprogs-1.39/lib/ext2fs/bitmaps.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/bitmaps.c 2006-10-06 23:42:52.000000000 -0400 @@ -102,7 +102,10 @@ { __u32 i, j; - for (i=map->end+1, j = i - map->start; i <= map->real_end; i++, j++) + /* Protect loop from wrap-around if map->real_end is maxed */ + for (i=map->end+1, j = i - map->start; + i <= map->real_end && i > map->end; + i++, j++) ext2fs_set_bit(j, map->bitmap); return; diff -Nru e2fsprogs-1.39/lib/ext2fs/bitops.h e2fsprogs-1.39-tyt1/lib/ext2fs/bitops.h --- e2fsprogs-1.39/lib/ext2fs/bitops.h 2006-03-29 12:51:53.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/bitops.h 2006-10-06 23:42:52.000000000 -0400 @@ -23,6 +23,8 @@ extern __u32 ext2fs_swab32(__u32 val); #ifdef WORDS_BIGENDIAN +#define ext2fs_cpu_to_le64(x) ext2fs_swab64((x)) +#define ext2fs_le64_to_cpu(x) ext2fs_swab64((x)) #define ext2fs_cpu_to_le32(x) ext2fs_swab32((x)) #define ext2fs_le32_to_cpu(x) ext2fs_swab32((x)) #define ext2fs_cpu_to_le16(x) ext2fs_swab16((x)) @@ -32,6 +34,8 @@ #define ext2fs_cpu_to_be16(x) ((__u16)(x)) #define ext2fs_be16_to_cpu(x) ((__u16)(x)) #else +#define ext2fs_cpu_to_le64(x) ((__u64)(x)) +#define ext2fs_le64_to_cpu(x) ((__u64)(x)) #define ext2fs_cpu_to_le32(x) ((__u32)(x)) #define ext2fs_le32_to_cpu(x) ((__u32)(x)) #define ext2fs_cpu_to_le16(x) ((__u16)(x)) @@ -284,6 +288,12 @@ : "0" (val)); \ return val; } + +_INLINE_ __u64 ext2fs_swab64(__u64 val) +{ + return (ext2fs_swab32(val >> 32) | + (((__u64)ext2fs_swab32(val & 0xFFFFFFFFUL)) << 32)); +} #endif #undef EXT2FS_ADDR diff -Nru e2fsprogs-1.39/lib/ext2fs/block.c e2fsprogs-1.39-tyt1/lib/ext2fs/block.c --- e2fsprogs-1.39/lib/ext2fs/block.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/block.c 2006-10-06 23:42:54.000000000 -0400 @@ -17,24 +17,16 @@ #include "ext2_fs.h" #include "ext2fs.h" +#include "block.h" -struct block_context { - ext2_filsys fs; - int (*func)(ext2_filsys fs, - blk_t *blocknr, - e2_blkcnt_t bcount, - blk_t ref_blk, - int ref_offset, - void *priv_data); - e2_blkcnt_t bcount; - int bsize; - int flags; - errcode_t errcode; - char *ind_buf; - char *dind_buf; - char *tind_buf; - void *priv_data; -}; +#ifdef EXT_DEBUG +void show_inode(ext2_ino_t ino) +{ + printf("inode: %u\n", ino); +} +#else +#define show_inode(ino) do { } while (0) +#endif static int block_iterate_ind(blk_t *ind_block, blk_t ref_block, int ref_offset, struct block_context *ctx) @@ -276,29 +268,30 @@ void *priv_data) { int i; - int got_inode = 0; int ret = 0; blk_t blocks[EXT2_N_BLOCKS]; /* directory data blocks */ struct ext2_inode inode; errcode_t retval; struct block_context ctx; int limit; + struct ext3_extent_header *eh; EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); + ctx.errcode = ext2fs_read_inode(fs, ino, &inode); + if (ctx.errcode) + return ctx.errcode; + /* * Check to see if we need to limit large files */ if (flags & BLOCK_FLAG_NO_LARGE) { - ctx.errcode = ext2fs_read_inode(fs, ino, &inode); - if (ctx.errcode) - return ctx.errcode; - got_inode = 1; if (!LINUX_S_ISDIR(inode.i_mode) && (inode.i_size_high != 0)) return EXT2_ET_FILE_TOO_BIG; } + /* The in-memory inode may have been changed by e2fsck */ retval = ext2fs_get_blocks(fs, ino, blocks); if (retval) return retval; @@ -325,10 +318,6 @@ */ if ((fs->super->s_creator_os == EXT2_OS_HURD) && !(flags & BLOCK_FLAG_DATA_ONLY)) { - ctx.errcode = ext2fs_read_inode(fs, ino, &inode); - if (ctx.errcode) - goto abort_exit; - got_inode = 1; if (inode.osd1.hurd1.h_i_translator) { ret |= (*ctx.func)(fs, &inode.osd1.hurd1.h_i_translator, @@ -338,7 +327,20 @@ goto abort_exit; } } - + + /* Iterate over normal data blocks with extents. We checked that + * EXT4_EXTENTS_FL and EXT3_EXT_MAGIC match in e2fsck_pass1(). */ + if (inode.i_flags & EXT4_EXTENTS_FL) { + eh = (struct ext3_extent_header *)blocks; + if (eh->eh_magic == EXT3_EXT_MAGIC) { + show_inode(ino); + ret |= block_iterate_extents(eh, 0, 0, &ctx); + } else { + ret |= BLOCK_ERROR; + } + goto abort_exit; + } + /* * Iterate over normal data blocks */ @@ -373,11 +375,6 @@ abort_exit: if (ret & BLOCK_CHANGED) { - if (!got_inode) { - retval = ext2fs_read_inode(fs, ino, &inode); - if (retval) - return retval; - } for (i=0; i < EXT2_N_BLOCKS; i++) inode.i_block[i] = blocks[i]; retval = ext2fs_write_inode(fs, ino, &inode); @@ -435,3 +432,321 @@ block_buf, xlate_func, &xl); } +#ifdef EXT_DEBUG +void show_header(struct ext3_extent_header *eh) +{ + printf("header: magic=%x entries=%u max=%u depth=%u generation=%u\n", + eh->eh_magic, eh->eh_entries, eh->eh_max, eh->eh_depth, + eh->eh_generation); +} + +void show_index(struct ext3_extent_idx *ix) +{ + printf("index: block=%u leaf=%u leaf_hi=%u unused=%u\n", + ix->ei_block, ix->ei_leaf, ix->ei_leaf_hi, ix->ei_unused); +} + +void show_extent(struct ext3_extent *ex) +{ + printf("extent: block=%u-%u len=%u start=%u start_hi=%u\n", + ex->ee_block, ex->ee_block + ex->ee_len - 1, + ex->ee_len, ex->ee_start, ex->ee_start_hi); +} +#else +#define show_header(eh) do { } while (0) +#define show_index(ix) do { } while (0) +#define show_extent(ex) do { } while (0) +#endif + +errcode_t ext2fs_extent_header_verify(struct ext3_extent_header *eh, int size) +{ + int eh_max, entry_size; + + show_header(eh); + if (eh->eh_magic != EXT3_EXT_MAGIC) + return EXT2_ET_EXTENT_HEADER_BAD; + if (eh->eh_entries > eh->eh_max) + return EXT2_ET_EXTENT_HEADER_BAD; + if (eh->eh_depth == 0) + entry_size = sizeof(struct ext3_extent); + else + entry_size = sizeof(struct ext3_extent_idx); + + eh_max = (size - sizeof(*eh)) / entry_size; + if (eh->eh_max > eh_max || eh->eh_max < eh_max - 2) + return EXT2_ET_EXTENT_HEADER_BAD; + + return 0; +} + +errcode_t ext2fs_extent_verify(ext2_filsys fs, struct ext3_extent *ex, + struct ext3_extent *ex_prev, + struct ext3_extent_idx *ix, int ix_len) +{ + show_extent(ex); + /* FIXME: 48-bit support */ + if (ex->ee_start > fs->super->s_blocks_count) + return EXT2_ET_EXTENT_LEAF_BAD; + + if (ex->ee_len == 0) + return EXT2_ET_EXTENT_LEAF_BAD; + + if (ex_prev) { + /* We can't have a zero logical block except for first index */ + if (ex->ee_block == 0) + return EXT2_ET_EXTENT_LEAF_BAD; + + /* FIXME: 48-bit support */ + /* extents must be in logical offset order */ + if (ex->ee_block < ex_prev->ee_block + ex_prev->ee_len) + return EXT2_ET_EXTENT_LEAF_BAD; + + /* extents must not overlap physical blocks */ + if ((ex->ee_start < ex_prev->ee_start + ex_prev->ee_len) && + (ex->ee_start + ex->ee_len > ex_prev->ee_start)) + return EXT2_ET_EXTENT_LEAF_BAD; + } + + if (ix) { + /* FIXME: 48-bit support */ + if (ex->ee_block < ix->ei_block) + return EXT2_ET_EXTENT_LEAF_BAD; + + if (ix_len && ex->ee_block + ex->ee_len > ix->ei_block + ix_len) + return EXT2_ET_EXTENT_LEAF_BAD; + } + + return 0; +} + +errcode_t ext2fs_extent_index_verify(ext2_filsys fs, struct ext3_extent_idx *ix, + struct ext3_extent_idx *ix_prev) +{ + show_index(ix); + /* FIXME: 48-bit support */ + if (ix->ei_leaf > fs->super->s_blocks_count) + return EXT2_ET_EXTENT_INDEX_BAD; + + if (ix_prev == NULL) + return 0; + + /* We can't have a zero logical block except for first index */ + if (ix->ei_block == 0) + return EXT2_ET_EXTENT_INDEX_BAD; + + if (ix->ei_block <= ix_prev->ei_block) + return EXT2_ET_EXTENT_INDEX_BAD; + + return 0; +} + +errcode_t ext2fs_extent_remove(struct ext3_extent_header *eh, + struct ext3_extent *ex) +{ + int entry = ex - EXT_FIRST_EXTENT(eh); + + if (entry < 0 || entry > eh->eh_entries) + return EXT2_ET_EXTENT_LEAF_BAD; + + memmove(ex, ex + 1, (eh->eh_entries - entry - 1) * sizeof(*ex)); + --eh->eh_entries; + + return 0; +} + +errcode_t ext2fs_extent_split(struct ext3_extent_header *eh, + struct ext3_extent *ex, int count) +{ + int entry = ex - EXT_FIRST_EXTENT(eh); + struct ext3_extent *ex_new = ex + 1; + + if (entry < 0 || entry > eh->eh_entries) + return EXT2_ET_EXTENT_LEAF_BAD; + + if (eh->eh_entries >= eh->eh_max) + return EXT2_ET_EXTENT_NO_SPACE; + + if (count > ex->ee_len) + return EXT2_ET_EXTENT_LEAF_BAD; + + if (count > ex->ee_len) + return EXT2_ET_EXTENT_LEAF_BAD; + + memmove(ex_new, ex, (eh->eh_entries - entry) * sizeof(*ex)); + ++eh->eh_entries; + + ex->ee_len = count; + /* FIXME: 48-bit support */ + ex_new->ee_len -= count; + ex_new->ee_block += count; + ex_new->ee_start += count; + + return 0; +} + +errcode_t ext2fs_extent_index_remove(struct ext3_extent_header *eh, + struct ext3_extent_idx *ix) +{ + struct ext3_extent_idx *first = EXT_FIRST_INDEX(eh); + int count = ix - first; + + memmove(ix, ix + 1, (eh->eh_entries - count - 1) * sizeof(*ix)); + --eh->eh_entries; + + return 0; +} + +/* Internal function for ext2fs_block_iterate(). + * See also block_bmap_extents(). */ +int block_iterate_extents(struct ext3_extent_header *eh, blk_t ref_block, + int ref_offset EXT2FS_ATTR((unused)), + struct block_context *ctx) +{ + int ret = 0; + int i, j, flags; + blk_t block_address; + struct ext3_extent *ex, *ex_prev = NULL; + + if (eh->eh_depth == 0) { + ex = EXT_FIRST_EXTENT(eh); + for (i = 0; i < eh->eh_entries; i++, ex++) { + show_extent(ex); + for (j = 0; j < ex->ee_len; j++) { + block_address = ex->ee_start + j; + flags = (*ctx->func)(ctx->fs, &block_address, + (ex->ee_block + j), + ref_block, i, + ctx->priv_data); + if (flags & BLOCK_ABORT) { + ret |= BLOCK_ABORT; + return ret; + } + if (!(flags & BLOCK_CHANGED)) + continue; + +#ifdef EXT_DEBUG + printf("ugh, extent leaf changed: " + "block was %u+%u = %u, now %u\n", + ex->ee_start, j, + ex->ee_start + j, block_address); +#endif + + /* FIXME: 48-bit support */ + if (ex_prev && + block_address == + ex_prev->ee_start + ex_prev->ee_len && + ex->ee_block + j == + ex_prev->ee_block + ex_prev->ee_len) { + /* can merge block with prev extent */ + ex_prev->ee_len++; + + ex->ee_len--; + if (ex->ee_len == 0) { + /* no blocks left in this one */ + ext2fs_extent_remove(eh, ex); + i--; ex--; + break; + } else { + ex->ee_start++; + ex->ee_block++; + j--; + } + ret |= BLOCK_CHANGED; + + } else if (ex->ee_len == 1) { + /* single-block extent is easy - + * change extent directly */ + ex->ee_start = block_address; + ret |= BLOCK_CHANGED; + + } else if (ext2fs_extent_split(eh, ex, j)) { + /* split for new block failed */ + /* No multi-level split yet */ + ret |= BLOCK_ABORT | BLOCK_ERROR; + return ret; + + } else if (j > 0 && (ex + 1)->ee_len > 1 && + ext2fs_extent_split(eh, ex + 1, 1)) { + /* split after new block failed */ + /* No multi-level split yet */ + ret |= BLOCK_ABORT | BLOCK_ERROR; + return ret; + + } else if (j == 0) { + if (ex->ee_len != 1) { + /* this is an internal error */ + ret |= BLOCK_ABORT |BLOCK_ERROR; + return ret; + } + ex->ee_start = block_address; + ret |= BLOCK_CHANGED; + + } else { + ex++; + i++; + if (ex->ee_len != 1) { + /* this is an internal error */ + ret |= BLOCK_ABORT |BLOCK_ERROR; + return ret; + } + ex->ee_start = block_address; + ret |= BLOCK_CHANGED; + } + } + ex_prev = ex; + } + } else { + char *block_buf; + struct ext3_extent_idx *ix; + struct ext3_extent_header *nh; + + ret = ext2fs_get_mem(ctx->fs->blocksize, &block_buf); + if (ret) + return ret; + + show_header(eh); + ix = EXT_FIRST_INDEX(eh); + for (i = 0; i < eh->eh_entries; i++, ix++) { + show_index(ix); + if (!(ctx->flags & BLOCK_FLAG_DEPTH_TRAVERSE) && + !(ctx->flags & BLOCK_FLAG_DATA_ONLY)) { + ret |= (*ctx->func)(ctx->fs, &ix->ei_leaf, + BLOCK_COUNT_IND, ref_block, + i, ctx->priv_data); + if (ret & BLOCK_ABORT) + goto free_buf; + } + ctx->errcode = ext2fs_read_ext_block(ctx->fs, + ix->ei_leaf, + block_buf); + if (ctx->errcode) { + ret |= BLOCK_ERROR; + goto free_buf; + } + nh = (struct ext3_extent_header *)block_buf; + if (ext2fs_extent_header_verify(nh,ctx->fs->blocksize)){ + ret |= BLOCK_ERROR; + goto free_buf; + } + flags = block_iterate_extents(nh, ix->ei_leaf, i, ctx); + if (flags & BLOCK_CHANGED) + ctx->errcode = + ext2fs_write_ext_block(ctx->fs, + ix->ei_leaf, + block_buf); + if (flags & BLOCK_ABORT) { + ret |= BLOCK_ABORT; + goto free_buf; + } + if ((ctx->flags & BLOCK_FLAG_DEPTH_TRAVERSE) && + !(ctx->flags & BLOCK_FLAG_DATA_ONLY)) + ret |= (*ctx->func)(ctx->fs, &ix->ei_leaf, + BLOCK_COUNT_IND, ref_block, + i, ctx->priv_data); + } + + free_buf: + ext2fs_free_mem(&block_buf); + } + return ret; +} diff -Nru e2fsprogs-1.39/lib/ext2fs/block.h e2fsprogs-1.39-tyt1/lib/ext2fs/block.h --- e2fsprogs-1.39/lib/ext2fs/block.h 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/block.h 2006-10-06 23:42:54.000000000 -0400 @@ -0,0 +1,34 @@ +/* + * block.h --- header for block iteration in block.c, extent.c + * + * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o. + * + * %Begin-Header% + * This file may be redistributed under the terms of the GNU Public + * License. + * %End-Header% + */ + +struct block_context { + ext2_filsys fs; + int (*func)(ext2_filsys fs, + blk_t *blocknr, + e2_blkcnt_t bcount, + blk_t ref_blk, + int ref_offset, + void *priv_data); + e2_blkcnt_t bcount; + int bsize; + int flags; + errcode_t errcode; + char *ind_buf; + char *dind_buf; + char *tind_buf; + void *priv_data; +}; + +/* Internal function, in extent.c */ +extern int block_iterate_extents(struct ext3_extent_header *eh, + blk_t ref_block, + int ref_offset EXT2FS_ATTR((unused)), + struct block_context *ctx); diff -Nru e2fsprogs-1.39/lib/ext2fs/bmap.c e2fsprogs-1.39-tyt1/lib/ext2fs/bmap.c --- e2fsprogs-1.39/lib/ext2fs/bmap.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/bmap.c 2006-10-06 23:42:54.000000000 -0400 @@ -17,6 +17,7 @@ #include "ext2_fs.h" #include "ext2fs.h" +#include "ext3_extents.h" #if defined(__GNUC__) && !defined(NO_INLINE_FUNCS) #define _BMAP_INLINE_ __inline__ @@ -31,6 +32,64 @@ #define inode_bmap(inode, nr) ((inode)->i_block[(nr)]) +/* see also block_iterate_extents() */ +static errcode_t block_bmap_extents(struct ext3_extent_header *eh, + ext2_filsys fs, blk_t block, + blk_t *phys_blk) +{ + struct ext3_extent *ex; + errcode_t ret = 0; + int i; + + if (eh->eh_depth == 0) { + ex = EXT_FIRST_EXTENT(eh); + for (i = 0; i < eh->eh_entries; i++, ex++) { + if ((ex->ee_block <= block) && + (block < ex->ee_block + ex->ee_len)) { + *phys_blk = ex->ee_start + + (block - ex->ee_block); + return 0; + } + } + + return BLOCK_ERROR; + } else { + struct ext3_extent_idx *ix; + char *block_buf; + + ret = ext2fs_get_mem(fs->blocksize, &block_buf); + if (ret) + return ret; + + ix = EXT_FIRST_INDEX(eh); + for (i = 0; i < eh->eh_entries; i++, ix++) { + struct ext3_extent_header *nh; + + if (ix->ei_block < block) + continue; + + ret = io_channel_read_blk(fs->io, ix->ei_leaf, 1, + block_buf); + if (ret) { + ret = BLOCK_ERROR; + goto free_buf; + } + + nh = (struct ext3_extent_header *)block_buf; + if (nh->eh_magic != EXT3_EXT_MAGIC) { + ret = BLOCK_ERROR; + goto free_buf; + } + + ret = block_bmap_extents(nh, fs, block, phys_blk); + } + + free_buf: + ext2fs_free_mem(&block_buf); + } + return ret; +} + static _BMAP_INLINE_ errcode_t block_ind_bmap(ext2_filsys fs, int flags, blk_t ind, char *block_buf, int *blocks_alloc, @@ -155,6 +214,17 @@ return retval; inode = &inode_buf; } + + if (inode->i_flags & EXT4_EXTENTS_FL) { + struct ext3_extent_header * eh; + eh = (struct ext3_extent_header *)&inode_bmap(inode, 0); + if (eh->eh_magic == EXT3_EXT_MAGIC) + retval = block_bmap_extents(eh, fs, block, phys_blk); + else + retval = BLOCK_ERROR; + goto done; + } + addr_per_block = (blk_t) fs->blocksize >> 2; if (!block_buf) { diff -Nru e2fsprogs-1.39/lib/ext2fs/bmove.c e2fsprogs-1.39-tyt1/lib/ext2fs/bmove.c --- e2fsprogs-1.39/lib/ext2fs/bmove.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/bmove.c 2006-10-06 23:42:52.000000000 -0400 @@ -73,7 +73,7 @@ ext2fs_mark_block_bitmap(pb->alloc_map, block); ret = BLOCK_CHANGED; if (pb->flags & EXT2_BMOVE_DEBUG) - printf("ino=%ld, blockcnt=%lld, %d->%d\n", pb->ino, + printf("ino=%ld, blockcnt=%lld, %u->%u\n", pb->ino, blockcnt, orig, block); } if (pb->add_dir) { diff -Nru e2fsprogs-1.39/lib/ext2fs/ChangeLog e2fsprogs-1.39-tyt1/lib/ext2fs/ChangeLog --- e2fsprogs-1.39/lib/ext2fs/ChangeLog 2006-05-21 19:24:50.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,79 @@ +2006-10-02 Eric Sandeen + + * getsize.c (ext2fs_get_device_size): Check to make sure that the + number of blocks doesn't overflow the retblocks return + parameter for regular files using stat64(). + +2006-10-01 Theodore Tso + + * bitops.h (ext2fs_swab32): Only include ext2fs_swab32() if + EXT2FS_ENABLE_SWAPFS is defined. + +2006-08-30 Eric Sandeen + + * initialize.c (ext2fs_initialize): Make sure inode count does + not overflow 32 bits. + +2006-08-30 Eric Sandeen + + * alloc_tables.c (ext2fs_allocate_group_table): + * check_desc.c (ext2fs_check_desc): + Use new inlines to calculate group first & last blocks. + * ext2fs.h: + Create new inlines to calculate first/last group blocks. + +2006-08-30 Eric Sandeen + + * bmove.c (process_block): + * getsize.c (main): + * icount.c (ext2fs_create_icount2, insert_icount_el): + * tst_badblocks.c (print_list, validate_test_seq, do_test_seq): + * tst_badblocks.c (invalid_proc): + * tst_getsize.c (main): + * tst_iscan.c (check_map): + * unix_io.c (raw_read_blk, unix_read_blk): + * write_bb_file.c (ext2fs_write_bb_FILE): Fix printf formats. + +2006-08-30 Eric Sandeen + + * closefs.c (write_backup_super): + * initialize.c (ext2fs_initialize): Remove unused variables. + +2006-08-30 Eric Sandeen + + * check_desc.c (ext2fs_check_desc): avoid overflows when iterating + over group descriptors on very large filesystems. + +2006-08-30 Theodore Tso + + * bitmaps.c (ext2fs_set_bitmap_padding): Fix potential overflow + problems when the number of blocks is close to 2**31. + + * ext2fs.h (ext2fs_div_ceil): Add new function which safely + calculates an integer division where the result is always + rounded up while avoiding overflow errors. + + * initialize.c (calc_reserved_gdt_blocks, ext2fs_initialize): + * openfs.c (ext2fs_open2): Use ext2fs_div_ceil() instead of a + using an open-coded expression which was subject to + overflows. + +2006-08-06 Andreas Dilger + + * bitops.h (ext2fs_cpu_to_le32, ext2fs_le64_to_cpu, + ext2fs_swab64): Add 64-bit byte swapping functions + +2006-08-05 Theodore Tso + + * ext2_fs.h (EXT4_EXTENTS_FL): Rename EXT3_EXTENTS_FL to + EXT4_EXTENTS_FL, and add EXT4_EXTENTS_FL to user visible + flags list. + +2006-07-15 Theodore Tso + + * ext2fs.h: Remove unneeded #ifdef since EXT2_DYNAMIC_REV is + always defined in the e2fsprogs-provided ext2_fs.h + 2006-05-21 Theodore Tso * openfs.c (ext2fs_open2): Fix type warning problem with sizeof() diff -Nru e2fsprogs-1.39/lib/ext2fs/check_desc.c e2fsprogs-1.39-tyt1/lib/ext2fs/check_desc.c --- e2fsprogs-1.39/lib/ext2fs/check_desc.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/check_desc.c 2006-10-06 23:42:52.000000000 -0400 @@ -32,37 +32,37 @@ errcode_t ext2fs_check_desc(ext2_filsys fs) { dgrp_t i; - blk_t block = fs->super->s_first_data_block; - blk_t next; + blk_t first_block = fs->super->s_first_data_block; + blk_t last_block; EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); for (i = 0; i < fs->group_desc_count; i++) { - next = block + fs->super->s_blocks_per_group; + first_block = ext2fs_group_first_block(fs, i); + last_block = ext2fs_group_last_block(fs, i); + /* * Check to make sure block bitmap for group is * located within the group. */ - if (fs->group_desc[i].bg_block_bitmap < block || - fs->group_desc[i].bg_block_bitmap >= next) + if (fs->group_desc[i].bg_block_bitmap < first_block || + fs->group_desc[i].bg_block_bitmap > last_block) return EXT2_ET_GDESC_BAD_BLOCK_MAP; /* * Check to make sure inode bitmap for group is * located within the group */ - if (fs->group_desc[i].bg_inode_bitmap < block || - fs->group_desc[i].bg_inode_bitmap >= next) + if (fs->group_desc[i].bg_inode_bitmap < first_block || + fs->group_desc[i].bg_inode_bitmap > last_block) return EXT2_ET_GDESC_BAD_INODE_MAP; /* * Check to make sure inode table for group is located * within the group */ - if (fs->group_desc[i].bg_inode_table < block || + if (fs->group_desc[i].bg_inode_table < first_block || ((fs->group_desc[i].bg_inode_table + - fs->inode_blocks_per_group) >= next)) + fs->inode_blocks_per_group) > last_block)) return EXT2_ET_GDESC_BAD_INODE_TABLE; - - block = next; } return 0; } diff -Nru e2fsprogs-1.39/lib/ext2fs/closefs.c e2fsprogs-1.39-tyt1/lib/ext2fs/closefs.c --- e2fsprogs-1.39/lib/ext2fs/closefs.c 2005-11-09 17:48:39.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/closefs.c 2006-10-06 23:42:52.000000000 -0400 @@ -206,7 +206,6 @@ errcode_t ext2fs_flush(ext2_filsys fs) { dgrp_t i,j; - blk_t group_block; errcode_t retval; unsigned long fs_state; struct ext2_super_block *super_shadow = 0; @@ -275,7 +274,6 @@ * Write out the master group descriptors, and the backup * superblocks and group descriptors. */ - group_block = fs->super->s_first_data_block; group_ptr = (char *) group_shadow; if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) old_desc_blocks = fs->super->s_first_meta_bg; diff -Nru e2fsprogs-1.39/lib/ext2fs/dirhash.c e2fsprogs-1.39-tyt1/lib/ext2fs/dirhash.c --- e2fsprogs-1.39/lib/ext2fs/dirhash.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/dirhash.c 2006-10-06 23:42:54.000000000 -0400 @@ -116,11 +116,20 @@ #undef K3 /* The old legacy hash */ -static ext2_dirhash_t dx_hack_hash (const char *name, int len) +static ext2_dirhash_t dx_hack_hash (const char *name, int len, + int unsigned_flag) { - __u32 hash0 = 0x12a3fe2d, hash1 = 0x37abe8f9; + __u32 hash, hash0 = 0x12a3fe2d, hash1 = 0x37abe8f9; + const unsigned char *ucp = (const unsigned char *) name; + const signed char *scp = (const signed char *) name; + int c; + while (len--) { - __u32 hash = hash1 + (hash0 ^ (*name++ * 7152373)); + if (unsigned_flag) + c = (int) *ucp++; + else + c = (int) *scp++; + hash = hash1 + (hash0 ^ (c * 7152373)); if (hash & 0x80000000) hash -= 0x7fffffff; hash1 = hash0; @@ -129,10 +138,13 @@ return (hash0 << 1); } -static void str2hashbuf(const char *msg, int len, __u32 *buf, int num) +static void str2hashbuf(const char *msg, int len, __u32 *buf, int num, + int unsigned_flag) { __u32 pad, val; - int i; + int i, c; + const unsigned char *ucp = (const unsigned char *) msg; + const signed char *scp = (const signed char *) msg; pad = (__u32)len | ((__u32)len << 8); pad |= pad << 16; @@ -143,7 +155,12 @@ for (i=0; i < len; i++) { if ((i % 4) == 0) val = pad; - val = msg[i] + (val << 8); + if (unsigned_flag) + c = (int) ucp[i]; + else + c = (int) scp[i]; + + val = c + (val << 8); if ((i % 4) == 3) { *buf++ = val; val = pad; @@ -179,6 +196,7 @@ const char *p; int i; __u32 in[8], buf[4]; + int unsigned_flag = 0; /* Initialize the default seed for the hash checksum functions */ buf[0] = 0x67452301; @@ -197,13 +215,17 @@ } switch (version) { + case EXT2_HASH_LEGACY_UNSIGNED: + unsigned_flag++; case EXT2_HASH_LEGACY: - hash = dx_hack_hash(name, len); + hash = dx_hack_hash(name, len, unsigned_flag); break; + case EXT2_HASH_HALF_MD4_UNSIGNED: + unsigned_flag++; case EXT2_HASH_HALF_MD4: p = name; while (len > 0) { - str2hashbuf(p, len, in, 8); + str2hashbuf(p, len, in, 8, unsigned_flag); halfMD4Transform(buf, in); len -= 32; p += 32; @@ -211,10 +233,12 @@ minor_hash = buf[2]; hash = buf[1]; break; + case EXT2_HASH_TEA_UNSIGNED: + unsigned_flag++; case EXT2_HASH_TEA: p = name; while (len > 0) { - str2hashbuf(p, len, in, 4); + str2hashbuf(p, len, in, 4, unsigned_flag); TEA_transform(buf, in); len -= 16; p += 16; diff -Nru e2fsprogs-1.39/lib/ext2fs/ext2_err.et.in e2fsprogs-1.39-tyt1/lib/ext2fs/ext2_err.et.in --- e2fsprogs-1.39/lib/ext2fs/ext2_err.et.in 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/ext2_err.et.in 2006-10-06 23:42:54.000000000 -0400 @@ -296,5 +296,17 @@ ec EXT2_ET_SET_BMAP_NO_IND, "Missing indirect block not present" +ec EXT2_ET_EXTENT_HEADER_BAD, + "Corrupt extent header" + +ec EXT2_ET_EXTENT_INDEX_BAD, + "Corrupt extent index" + +ec EXT2_ET_EXTENT_LEAF_BAD, + "Corrupt extent" + +ec EXT2_ET_EXTENT_NO_SPACE, + "No free space in extent map" + end diff -Nru e2fsprogs-1.39/lib/ext2fs/ext2_ext_attr.h e2fsprogs-1.39-tyt1/lib/ext2fs/ext2_ext_attr.h --- e2fsprogs-1.39/lib/ext2fs/ext2_ext_attr.h 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/ext2_ext_attr.h 2006-10-06 23:42:52.000000000 -0400 @@ -6,6 +6,8 @@ (C) 2000 Andreas Gruenbacher, */ +#ifndef _EXT2_EXT_ATTR_H +#define _EXT2_EXT_ATTR_H /* Magic value in attribute blocks */ #define EXT2_EXT_ATTR_MAGIC_v1 0xEA010000 #define EXT2_EXT_ATTR_MAGIC 0xEA020000 @@ -66,4 +68,4 @@ # define ext2_set_ext_attr NULL # endif #endif /* __KERNEL__ */ - +#endif /* _EXT2_EXT_ATTR_H */ diff -Nru e2fsprogs-1.39/lib/ext2fs/ext2_fs.h e2fsprogs-1.39-tyt1/lib/ext2fs/ext2_fs.h --- e2fsprogs-1.39/lib/ext2fs/ext2_fs.h 2006-05-04 12:06:34.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/ext2_fs.h 2006-10-06 23:42:54.000000000 -0400 @@ -170,9 +170,12 @@ __u8 unused_flags; }; -#define EXT2_HASH_LEGACY 0 -#define EXT2_HASH_HALF_MD4 1 -#define EXT2_HASH_TEA 2 +#define EXT2_HASH_LEGACY 0 +#define EXT2_HASH_HALF_MD4 1 +#define EXT2_HASH_TEA 2 +#define EXT2_HASH_LEGACY_UNSIGNED 3 +#define EXT2_HASH_HALF_MD4_UNSIGNED 4 +#define EXT2_HASH_TEA_UNSIGNED 5 #define EXT2_HASH_FLAG_INCOMPAT 0x1 @@ -236,10 +239,10 @@ #define EXT2_NOTAIL_FL 0x00008000 /* file tail should not be merged */ #define EXT2_DIRSYNC_FL 0x00010000 /* Synchronous directory modifications */ #define EXT2_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ -#define EXT3_EXTENTS_FL 0x00080000 /* Inode uses extents */ +#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */ #define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ -#define EXT2_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */ +#define EXT2_FL_USER_VISIBLE 0x000BDFFF /* User visible flags */ #define EXT2_FL_USER_MODIFIABLE 0x000080FF /* User modifiable flags */ /* diff -Nru e2fsprogs-1.39/lib/ext2fs/ext2fs.h e2fsprogs-1.39-tyt1/lib/ext2fs/ext2fs.h --- e2fsprogs-1.39/lib/ext2fs/ext2fs.h 2006-05-04 12:18:39.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/ext2fs.h 2006-10-06 23:42:54.000000000 -0400 @@ -65,13 +65,16 @@ #if EXT2_FLAT_INCLUDES #include "e2_types.h" #include "ext2_fs.h" +#include "ext3_extents.h" #else #include #include +#include #endif /* EXT2_FLAT_INCLUDES */ typedef __u32 ext2_ino_t; typedef __u32 blk_t; +typedef __u64 blk64_t; typedef __u32 dgrp_t; typedef __u32 ext2_off_t; typedef __s64 e2_blkcnt_t; @@ -117,15 +120,11 @@ typedef struct ext2fs_struct_generic_bitmap *ext2fs_inode_bitmap; typedef struct ext2fs_struct_generic_bitmap *ext2fs_block_bitmap; -#ifdef EXT2_DYNAMIC_REV #define EXT2_FIRST_INODE(s) EXT2_FIRST_INO(s) -#else -#define EXT2_FIRST_INODE(s) EXT2_FIRST_INO -#define EXT2_INODE_SIZE(s) sizeof(struct ext2_inode) -#endif + /* - * badblocks list definitions + * Badblocks list definitions */ typedef struct ext2_struct_u32_list *ext2_badblocks_list; @@ -189,6 +188,7 @@ #define EXT2_FLAG_JOURNAL_DEV_OK 0x1000 #define EXT2_FLAG_IMAGE_FILE 0x2000 #define EXT2_FLAG_EXCLUSIVE 0x4000 +#define EXT2_FLAG_SOFTSUPP_FEATURES 0x8000 /* * Special flag in the ext2 inode i_flag field that means that this is @@ -431,6 +431,16 @@ #define HOLE_BLKADDR(_b) ((_b) == 0 || (_b) == EXT2FS_COMPRESSED_BLKADDR) /* + * Generic (non-filesystem layout specific) extents structure + */ +struct ext2fs_extent { + blk64_t e_pblk; /* first physical block */ + blk64_t e_lblk; /* first logical block extent covers */ + int e_len; /* number of blocks covered by extent */ +}; + + +/* * Features supported by this version of the library */ #define EXT2_LIB_FEATURE_COMPAT_SUPP (EXT2_FEATURE_COMPAT_DIR_PREALLOC|\ @@ -453,15 +463,25 @@ EXT2_FEATURE_INCOMPAT_COMPRESSION|\ EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|\ EXT2_FEATURE_INCOMPAT_META_BG|\ - EXT3_FEATURE_INCOMPAT_RECOVER) + EXT3_FEATURE_INCOMPAT_RECOVER|\ + EXT3_FEATURE_INCOMPAT_EXTENTS) #else #define EXT2_LIB_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE|\ EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|\ EXT2_FEATURE_INCOMPAT_META_BG|\ - EXT3_FEATURE_INCOMPAT_RECOVER) + EXT3_FEATURE_INCOMPAT_RECOVER|\ + EXT3_FEATURE_INCOMPAT_EXTENTS) #endif #define EXT2_LIB_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\ EXT2_FEATURE_RO_COMPAT_LARGE_FILE) + +/* + * These features are only allowed if EXT2_FLAG_SOFTSUPP_FEATURES is passed + * to ext2fs_openfs() + */ +#define EXT2_LIB_SOFTSUPP_INCOMPAT (EXT3_FEATURE_INCOMPAT_EXTENTS) +/* #define EXT2_LIB_SOFTSUPP_RO_COMPAT 0 */ + /* * function prototypes */ @@ -711,6 +731,21 @@ char *block_buf, int adjust, __u32 *newcount); +/* extent.c */ +errcode_t ext2fs_extent_header_verify(struct ext3_extent_header *eh, int size); +errcode_t ext2fs_extent_verify(ext2_filsys fs, struct ext3_extent *ex, + struct ext3_extent *ex_prev, + struct ext3_extent_idx *ix, int ix_len); +errcode_t ext2fs_extent_index_verify(ext2_filsys fs, + struct ext3_extent_idx *ix, + struct ext3_extent_idx *ix_prev); +errcode_t ext2fs_extent_remove(struct ext3_extent_header *eh, + struct ext3_extent *ex); +errcode_t ext2fs_extent_split(struct ext3_extent_header *eh, + struct ext3_extent *ex, int count); +errcode_t ext2fs_extent_index_remove(struct ext3_extent_header *eh, + struct ext3_extent_idx *ix); + /* fileio.c */ extern errcode_t ext2fs_file_open2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode, @@ -765,6 +800,8 @@ /* ind_block.c */ errcode_t ext2fs_read_ind_block(ext2_filsys fs, blk_t blk, void *buf); errcode_t ext2fs_write_ind_block(ext2_filsys fs, blk_t blk, void *buf); +errcode_t ext2fs_read_ext_block(ext2_filsys fs, blk_t blk, void *buf); +errcode_t ext2fs_write_ext_block(ext2_filsys fs, blk_t blk, void *buf); /* initialize.c */ extern errcode_t ext2fs_initialize(const char *name, int flags, @@ -930,6 +967,9 @@ int has_header); extern void ext2fs_swap_super(struct ext2_super_block * super); extern void ext2fs_swap_group_desc(struct ext2_group_desc *gdp); +extern void ext2fs_swap_extent_header(struct ext3_extent_header *eh); +extern void ext2fs_swap_extent_index(struct ext3_extent_idx *ix); +extern void ext2fs_swap_extent(struct ext3_extent *ex); extern void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t, struct ext2_inode_large *f, int hostorder, int bufsize); @@ -967,8 +1007,11 @@ extern int ext2fs_test_bb_dirty(ext2_filsys fs); extern int ext2fs_group_of_blk(ext2_filsys fs, blk_t blk); extern int ext2fs_group_of_ino(ext2_filsys fs, ext2_ino_t ino); +extern blk_t ext2fs_group_first_block(ext2_filsys fs, dgrp_t group); +extern blk_t ext2fs_group_last_block(ext2_filsys fs, dgrp_t group); extern blk_t ext2fs_inode_data_blocks(ext2_filsys fs, struct ext2_inode *inode); +extern unsigned int ext2fs_div_ceil(unsigned int a, unsigned int b); /* * The actual inlined functions definitions themselves... @@ -1130,12 +1173,42 @@ return (ino - 1) / fs->super->s_inodes_per_group; } +/* + * Return the first block (inclusive) in a group + */ +_INLINE_ blk_t ext2fs_group_first_block(ext2_filsys fs, dgrp_t group) +{ + return fs->super->s_first_data_block + + (group * fs->super->s_blocks_per_group); +} + +/* + * Return the last block (inclusive) in a group + */ +_INLINE_ blk_t ext2fs_group_last_block(ext2_filsys fs, dgrp_t group) +{ + return (group == fs->group_desc_count - 1 ? + fs->super->s_blocks_count - 1 : + ext2fs_group_first_block(fs, group) + + (fs->super->s_blocks_per_group - 1)); +} + _INLINE_ blk_t ext2fs_inode_data_blocks(ext2_filsys fs, struct ext2_inode *inode) { return inode->i_blocks - (inode->i_file_acl ? fs->blocksize >> 9 : 0); } + +/* + * This is an efficient, overflow safe way of calculating ceil((1.0 * a) / b) + */ +_INLINE_ unsigned int ext2fs_div_ceil(unsigned int a, unsigned int b) +{ + if (!a) + return 0; + return ((a - 1) / b) + 1; +} #undef _INLINE_ #endif diff -Nru e2fsprogs-1.39/lib/ext2fs/ext3_extents.h e2fsprogs-1.39-tyt1/lib/ext2fs/ext3_extents.h --- e2fsprogs-1.39/lib/ext2fs/ext3_extents.h 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/ext3_extents.h 2006-10-06 23:42:54.000000000 -0400 @@ -0,0 +1,238 @@ +/* + * Copyright (c) 2003,2004 Cluster File Systems, Inc, info@clusterfs.com + * Written by Alex Tomas + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public Licens + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111- + */ + +#ifndef _LINUX_EXT3_EXTENTS +#define _LINUX_EXT3_EXTENTS + +/* + * with AGRESSIVE_TEST defined capacity of index/leaf blocks + * become very little, so index split, in-depth growing and + * other hard changes happens much more often + * this is for debug purposes only + */ +#define AGRESSIVE_TEST_ + +/* + * if CHECK_BINSEARCH defined, then results of binary search + * will be checked by linear search + */ +#define CHECK_BINSEARCH_ + +/* + * if EXT_DEBUG is defined you can use 'extdebug' mount option + * to get lots of info what's going on + */ +//#define EXT_DEBUG +#ifdef EXT_DEBUG +#define ext_debug(tree,fmt,a...) \ +do { \ + if (test_opt((tree)->inode->i_sb, EXTDEBUG)) \ + printk(fmt, ##a); \ +} while (0); +#else +#define ext_debug(tree,fmt,a...) +#endif + +/* + * if EXT_STATS is defined then stats numbers are collected + * these number will be displayed at umount time + */ +#define EXT_STATS_ + + +#define EXT3_ALLOC_NEEDED 3 /* block bitmap + group desc. + sb */ + +/* + * ext3_inode has i_block array (total 60 bytes) + * first 4 bytes are used to store: + * - tree depth (0 mean there is no tree yet. all extents in the inode) + * - number of alive extents in the inode + */ + +/* + * this is extent on-disk structure + * it's used at the bottom of the tree + */ +struct ext3_extent { + __u32 ee_block; /* first logical block extent covers */ + __u16 ee_len; /* number of blocks covered by extent */ + __u16 ee_start_hi; /* high 16 bits of physical block */ + __u32 ee_start; /* low 32 bigs of physical block */ +}; + +/* + * this is index on-disk structure + * it's used at all the levels, but the bottom + */ +struct ext3_extent_idx { + __u32 ei_block; /* index covers logical blocks from 'block' */ + __u32 ei_leaf; /* pointer to the physical block of the next * + * level. leaf or next index could bet here */ + __u16 ei_leaf_hi; /* high 16 bits of physical block */ + __u16 ei_unused; +}; + +/* + * each block (leaves and indexes), even inode-stored has header + */ +struct ext3_extent_header { + __u16 eh_magic; /* probably will support different formats */ + __u16 eh_entries; /* number of valid entries */ + __u16 eh_max; /* capacity of store in entries */ + __u16 eh_depth; /* has tree real underlaying blocks? */ + __u32 eh_generation; /* generation of the tree */ +}; + +#define EXT3_EXT_MAGIC 0xf30a + +/* + * array of ext3_ext_path contains path to some extent + * creation/lookup routines use it for traversal/splitting/etc + * truncate uses it to simulate recursive walking + */ +struct ext3_ext_path { + __u32 p_block; + __u16 p_depth; + struct ext3_extent *p_ext; + struct ext3_extent_idx *p_idx; + struct ext3_extent_header *p_hdr; + struct buffer_head *p_bh; +}; + +/* + * structure for external API + */ + +#define EXT_CONTINUE 0 +#define EXT_BREAK 1 +#define EXT_REPEAT 2 + + +#define EXT_MAX_BLOCK 0xffffffff +#define EXT_CACHE_MARK 0xffff + + +#define EXT_FIRST_EXTENT(__hdr__) \ + ((struct ext3_extent *) (((char *) (__hdr__)) + \ + sizeof(struct ext3_extent_header))) +#define EXT_FIRST_INDEX(__hdr__) \ + ((struct ext3_extent_idx *) (((char *) (__hdr__)) + \ + sizeof(struct ext3_extent_header))) +#define EXT_HAS_FREE_INDEX(__path__) \ + ((__path__)->p_hdr->eh_entries < (__path__)->p_hdr->eh_max) +#define EXT_LAST_EXTENT(__hdr__) \ + (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_entries - 1) +#define EXT_LAST_INDEX(__hdr__) \ + (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_entries - 1) +#define EXT_MAX_EXTENT(__hdr__) \ + (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_max - 1) +#define EXT_MAX_INDEX(__hdr__) \ + (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_max - 1) + +#define EXT_ROOT_HDR(tree) \ + ((struct ext3_extent_header *) (tree)->root) +#define EXT_BLOCK_HDR(bh) \ + ((struct ext3_extent_header *) (bh)->b_data) +#define EXT_DEPTH(_t_) \ + (((struct ext3_extent_header *)((_t_)->root))->eh_depth) +#define EXT_GENERATION(_t_) \ + (((struct ext3_extent_header *)((_t_)->root))->eh_generation) + + +#define EXT_ASSERT(__x__) if (!(__x__)) BUG(); + + +/* + * this structure is used to gather extents from the tree via ioctl + */ +struct ext3_extent_buf { + unsigned long start; + int buflen; + void *buffer; + void *cur; + int err; +}; + +/* + * this structure is used to collect stats info about the tree + */ +struct ext3_extent_tree_stats { + int depth; + int extents_num; + int leaf_num; +}; + +#ifdef __KERNEL__ +/* + * ext3_extents_tree is used to pass initial information + * to top-level extents API + */ +struct ext3_extents_helpers; +struct ext3_extents_tree { + struct inode *inode; /* inode which tree belongs to */ + void *root; /* ptr to data top of tree resides at */ + void *buffer; /* will be passed as arg to ^^ routines */ + int buffer_len; + void *private; + struct ext3_extent *cex;/* last found extent */ + struct ext3_extents_helpers *ops; +}; + +struct ext3_extents_helpers { + int (*get_write_access)(handle_t *h, void *buffer); + int (*mark_buffer_dirty)(handle_t *h, void *buffer); + int (*mergable)(struct ext3_extent *ex1, struct ext3_extent *ex2); + int (*remove_extent_credits)(struct ext3_extents_tree *, + struct ext3_extent *, unsigned long, + unsigned long); + int (*remove_extent)(struct ext3_extents_tree *, + struct ext3_extent *, unsigned long, + unsigned long); + int (*new_block)(handle_t *, struct ext3_extents_tree *, + struct ext3_ext_path *, struct ext3_extent *, + int *); +}; + +/* + * to be called by ext3_ext_walk_space() + * negative retcode - error + * positive retcode - signal for ext3_ext_walk_space(), see below + * callback must return valid extent (passed or newly created) + */ +typedef int (*ext_prepare_callback)(struct ext3_extents_tree *, + struct ext3_ext_path *, + struct ext3_extent *, int); +void ext3_init_tree_desc(struct ext3_extents_tree *, struct inode *); +extern int ext3_extent_tree_init(handle_t *, struct ext3_extents_tree *); +extern int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *, struct ext3_ext_path *); +extern int ext3_ext_insert_extent(handle_t *, struct ext3_extents_tree *, struct ext3_ext_path *, struct ext3_extent *); +extern int ext3_ext_walk_space(struct ext3_extents_tree *, unsigned long, unsigned long, ext_prepare_callback); +extern int ext3_ext_remove_space(struct ext3_extents_tree *, unsigned long, unsigned long); +extern struct ext3_ext_path * ext3_ext_find_extent(struct ext3_extents_tree *, int, struct ext3_ext_path *); + +static inline void +ext3_ext_invalidate_cache(struct ext3_extents_tree *tree) +{ + if (tree->cex) + tree->cex->ee_len = 0; +} +#endif /* __KERNEL__ */ + + +#endif /* _LINUX_EXT3_EXTENTS */ + diff -Nru e2fsprogs-1.39/lib/ext2fs/extent.c e2fsprogs-1.39-tyt1/lib/ext2fs/extent.c --- e2fsprogs-1.39/lib/ext2fs/extent.c 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/extent.c 2006-10-06 23:42:54.000000000 -0400 @@ -0,0 +1,394 @@ +/* + * extent.c --- iterate over all extents in an inode + * + * Copyright (C) 2006 Theodore Ts'o. + * + * %Begin-Header% + * This file may be redistributed under the terms of the GNU Public + * License. + * %End-Header% + */ + +#include +#include +#if HAVE_UNISTD_H +#include +#endif +#include + +#include "ext2_fs.h" +#include "ext2fs.h" + +struct block_context { + ext2_filsys fs; + int (*func)(ext2_filsys fs, + blk_t *blocknr, + e2_blkcnt_t bcount, + blk_t ref_blk, + int ref_offset, + void *priv_data); + e2_blkcnt_t bcount; + int bsize; + int flags; + errcode_t errcode; + char *ind_buf; + char *dind_buf; + char *tind_buf; + void *priv_data; +}; + + +#ifdef EXT_DEBUG +void show_header(struct ext3_extent_header *eh) +{ + printf("header: magic=%x entries=%u max=%u depth=%u generation=%u\n", + eh->eh_magic, eh->eh_entries, eh->eh_max, eh->eh_depth, + eh->eh_generation); +} + +void show_index(struct ext3_extent_idx *ix) +{ + printf("index: block=%u leaf=%u leaf_hi=%u unused=%u\n", + ix->ei_block, ix->ei_leaf, ix->ei_leaf_hi, ix->ei_unused); +} + +void show_extent(struct ext3_extent *ex) +{ + printf("extent: block=%u-%u len=%u start=%u start_hi=%u\n", + ex->ee_block, ex->ee_block + ex->ee_len - 1, + ex->ee_len, ex->ee_start, ex->ee_start_hi); +} +#else +#define show_header(eh) do { } while (0) +#define show_index(ix) do { } while (0) +#define show_extent(ex) do { } while (0) +#endif + +static errcode_t extent_header_verify(struct ext3_extent_header *eh, int size) +{ + int eh_max, entry_size; + + show_header(eh); + if (eh->eh_magic != EXT3_EXT_MAGIC) + return EXT2_ET_EXTENT_HEADER_BAD; + if (eh->eh_entries > eh->eh_max) + return EXT2_ET_EXTENT_HEADER_BAD; + if (eh->eh_depth == 0) + entry_size = sizeof(struct ext3_extent); + else + entry_size = sizeof(struct ext3_extent_idx); + + eh_max = (size - sizeof(*eh)) / entry_size; + if (eh->eh_max > eh_max || eh->eh_max < eh_max - 2) + return EXT2_ET_EXTENT_HEADER_BAD; + + return 0; +} + +static errcode_t extent_verify(ext2_filsys fs, struct ext3_extent *ex, + struct ext3_extent *ex_prev, + struct ext3_extent_idx *ix, int ix_len) +{ + show_extent(ex); + /* FIXME: 48-bit support */ + if (ex->ee_start > fs->super->s_blocks_count) + return EXT2_ET_EXTENT_LEAF_BAD; + + if (ex->ee_len == 0) + return EXT2_ET_EXTENT_LEAF_BAD; + + if (ex_prev) { + /* We can't have a zero logical block except for first index */ + if (ex->ee_block == 0) + return EXT2_ET_EXTENT_LEAF_BAD; + + /* FIXME: 48-bit support */ + /* extents must be in logical offset order */ + if (ex->ee_block < ex_prev->ee_block + ex_prev->ee_len) + return EXT2_ET_EXTENT_LEAF_BAD; + + /* extents must not overlap physical blocks */ + if ((ex->ee_start < ex_prev->ee_start + ex_prev->ee_len) && + (ex->ee_start + ex->ee_len > ex_prev->ee_start)) + return EXT2_ET_EXTENT_LEAF_BAD; + } + + if (ix) { + /* FIXME: 48-bit support */ + if (ex->ee_block < ix->ei_block) + return EXT2_ET_EXTENT_LEAF_BAD; + + if (ix_len && ex->ee_block + ex->ee_len > ix->ei_block + ix_len) + return EXT2_ET_EXTENT_LEAF_BAD; + } + + return 0; +} + +static errcode_t extent_index_verify(ext2_filsys fs, struct ext3_extent_idx *ix, + struct ext3_extent_idx *ix_prev) +{ + show_index(ix); + /* FIXME: 48-bit support */ + if (ix->ei_leaf > fs->super->s_blocks_count) + return EXT2_ET_EXTENT_INDEX_BAD; + + if (ix_prev == NULL) + return 0; + + /* We can't have a zero logical block except for first index */ + if (ix->ei_block == 0) + return EXT2_ET_EXTENT_INDEX_BAD; + + if (ix->ei_block <= ix_prev->ei_block) + return EXT2_ET_EXTENT_INDEX_BAD; + + return 0; +} + +static errcode_t extent_remove(struct ext3_extent_header *eh, + struct ext3_extent *ex) +{ + int entry = ex - EXT_FIRST_EXTENT(eh); + + if (entry < 0 || entry > eh->eh_entries) + return EXT2_ET_EXTENT_LEAF_BAD; + + memmove(ex, ex + 1, (eh->eh_entries - entry - 1) * sizeof(*ex)); + --eh->eh_entries; + + return 0; +} + +static errcode_t extent_split(struct ext3_extent_header *eh, + struct ext3_extent *ex, int count) +{ + int entry = ex - EXT_FIRST_EXTENT(eh); + struct ext3_extent *ex_new = ex + 1; + + if (entry < 0 || entry > eh->eh_entries) + return EXT2_ET_EXTENT_LEAF_BAD; + + if (eh->eh_entries >= eh->eh_max) + return EXT2_ET_EXTENT_NO_SPACE; + + if (count > ex->ee_len) + return EXT2_ET_EXTENT_LEAF_BAD; + + if (count > ex->ee_len) + return EXT2_ET_EXTENT_LEAF_BAD; + + memmove(ex_new, ex, (eh->eh_entries - entry) * sizeof(*ex)); + ++eh->eh_entries; + + ex->ee_len = count; + /* FIXME: 48-bit support */ + ex_new->ee_len -= count; + ex_new->ee_block += count; + ex_new->ee_start += count; + + return 0; +} + +static errcode_t extent_index_remove(struct ext3_extent_header *eh, + struct ext3_extent_idx *ix) +{ + struct ext3_extent_idx *first = EXT_FIRST_INDEX(eh); + int count = ix - first; + + memmove(ix, ix + 1, (eh->eh_entries - count - 1) * sizeof(*ix)); + --eh->eh_entries; + + return 0; +} + +/* Internal function for ext2fs_block_iterate(). + * See also block_bmap_extents(). */ +static int block_iterate_extents(struct ext3_extent_header *eh, blk_t ref_block, + int ref_offset EXT2FS_ATTR((unused)), + struct block_context *ctx) +{ + int ret = 0; + int i, j, flags; + blk_t block_address; + struct ext3_extent *ex, *ex_prev = NULL; + + if (eh->eh_depth == 0) { + ex = EXT_FIRST_EXTENT(eh); + for (i = 0; i < eh->eh_entries; i++, ex++) { + show_extent(ex); + for (j = 0; j < ex->ee_len; j++) { + block_address = ex->ee_start + j; + flags = (*ctx->func)(ctx->fs, &block_address, + (ex->ee_block + j), + ref_block, i, + ctx->priv_data); + if (flags & BLOCK_ABORT) { + ret |= BLOCK_ABORT; + return ret; + } + if (!(flags & BLOCK_CHANGED)) + continue; + +#ifdef EXT_DEBUG + printf("ugh, extent leaf changed: " + "block was %u+%u = %u, now %u\n", + ex->ee_start, j, + ex->ee_start + j, block_address); +#endif + + /* FIXME: 48-bit support */ + if (ex_prev && + block_address == + ex_prev->ee_start + ex_prev->ee_len && + ex->ee_block + j == + ex_prev->ee_block + ex_prev->ee_len) { + /* can merge block with prev extent */ + ex_prev->ee_len++; + + ex->ee_len--; + if (ex->ee_len == 0) { + /* no blocks left in this one */ + extent_remove(eh, ex); + i--; ex--; + break; + } else { + ex->ee_start++; + ex->ee_block++; + j--; + } + ret |= BLOCK_CHANGED; + + } else if (ex->ee_len == 1) { + /* single-block extent is easy - + * change extent directly */ + ex->ee_start = block_address; + ret |= BLOCK_CHANGED; + + } else if (extent_split(eh, ex, j)) { + /* split for new block failed */ + /* No multi-level split yet */ + ret |= BLOCK_ABORT | BLOCK_ERROR; + return ret; + + } else if (j > 0 && (ex + 1)->ee_len > 1 && + extent_split(eh, ex + 1, 1)) { + /* split after new block failed */ + /* No multi-level split yet */ + ret |= BLOCK_ABORT | BLOCK_ERROR; + return ret; + + } else if (j == 0) { + if (ex->ee_len != 1) { + /* this is an internal error */ + ret |= BLOCK_ABORT |BLOCK_ERROR; + return ret; + } + ex->ee_start = block_address; + ret |= BLOCK_CHANGED; + + } else { + ex++; + i++; + if (ex->ee_len != 1) { + /* this is an internal error */ + ret |= BLOCK_ABORT |BLOCK_ERROR; + return ret; + } + ex->ee_start = block_address; + ret |= BLOCK_CHANGED; + } + } + ex_prev = ex; + } + } else { + char *block_buf; + struct ext3_extent_idx *ix; + struct ext3_extent_header *nh; + + ret = ext2fs_get_mem(ctx->fs->blocksize, &block_buf); + if (ret) + return ret; + + show_header(eh); + ix = EXT_FIRST_INDEX(eh); + for (i = 0; i < eh->eh_entries; i++, ix++) { + show_index(ix); + if (!(ctx->flags & BLOCK_FLAG_DEPTH_TRAVERSE) && + !(ctx->flags & BLOCK_FLAG_DATA_ONLY)) { + ret |= (*ctx->func)(ctx->fs, &ix->ei_leaf, + BLOCK_COUNT_IND, ref_block, + i, ctx->priv_data); + if (ret & BLOCK_ABORT) + goto free_buf; + } + ctx->errcode = ext2fs_read_ext_block(ctx->fs, + ix->ei_leaf, + block_buf); + if (ctx->errcode) { + ret |= BLOCK_ERROR; + goto free_buf; + } + nh = (struct ext3_extent_header *)block_buf; + if (extent_header_verify(nh,ctx->fs->blocksize)){ + ret |= BLOCK_ERROR; + goto free_buf; + } + flags = block_iterate_extents(nh, ix->ei_leaf, i, ctx); + if (flags & BLOCK_CHANGED) + ctx->errcode = + ext2fs_write_ext_block(ctx->fs, + ix->ei_leaf, + block_buf); + if (flags & BLOCK_ABORT) { + ret |= BLOCK_ABORT; + goto free_buf; + } + if ((ctx->flags & BLOCK_FLAG_DEPTH_TRAVERSE) && + !(ctx->flags & BLOCK_FLAG_DATA_ONLY)) + ret |= (*ctx->func)(ctx->fs, &ix->ei_leaf, + BLOCK_COUNT_IND, ref_block, + i, ctx->priv_data); + } + + free_buf: + ext2fs_free_mem(&block_buf); + } + return ret; +} + + +errcode_t ext2fs_extent_iterate2(ext2_filsys fs, + ext2_ino_t ino, + int flags, + char *block_buf, + int (*func)(ext2_filsys fs, + struct ext2fs_extent *extent, + void *priv_data), + int (*meta_func)(ext2_filsys fs, + blk64_t blk, + int blk_type, + char *buf, + void *priv_data), + void *priv_data) +{ + struct ext2_inode inode; + errcode_t errcode; + struct ext3_extent_header *eh; + + EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); + + errcode = ext2fs_read_inode(fs, ino, &inode); + if (errcode) + return errcode; + + if (!(inode.i_flags & EXT4_EXTENTS_FL)) { + /* + * XXX not yet.... + */ + return -EOPNOTSUPP; + } + + eh = (struct ext3_extent_header *) inode.i_blocks; + +} diff -Nru e2fsprogs-1.39/lib/ext2fs/getsize.c e2fsprogs-1.39-tyt1/lib/ext2fs/getsize.c --- e2fsprogs-1.39/lib/ext2fs/getsize.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/getsize.c 2006-10-06 23:42:52.000000000 -0400 @@ -44,6 +44,7 @@ #if HAVE_SYS_STAT_H #include #endif +#include #if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE) #define BLKGETSIZE _IO(0x12,96) /* return device size */ @@ -250,6 +251,11 @@ if (fstat(fd, &st) == 0) #endif if (S_ISREG(st.st_mode)) { + if ((sizeof(*retblocks) < sizeof(unsigned long long)) && + ((st.st_size / blocksize) > 0xFFFFFFFF)) { + rc = EFBIG; + goto out; + } *retblocks = st.st_size / blocksize; goto out; } @@ -302,7 +308,7 @@ "while calling ext2fs_get_device_size"); exit(1); } - printf("Device %s has %d 1k blocks.\n", argv[1], blocks); + printf("Device %s has %u 1k blocks.\n", argv[1], blocks); exit(0); } #endif diff -Nru e2fsprogs-1.39/lib/ext2fs/icount.c e2fsprogs-1.39-tyt1/lib/ext2fs/icount.c --- e2fsprogs-1.39/lib/ext2fs/icount.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/icount.c 2006-10-06 23:42:52.000000000 -0400 @@ -116,7 +116,7 @@ bytes = (size_t) (icount->size * sizeof(struct ext2_icount_el)); #if 0 - printf("Icount allocated %d entries, %d bytes.\n", + printf("Icount allocated %u entries, %d bytes.\n", icount->size, bytes); #endif retval = ext2fs_get_mem(bytes, &icount->list); @@ -176,7 +176,7 @@ if (new_size < (icount->size + 100)) new_size = icount->size + 100; #if 0 - printf("Reallocating icount %d entries...\n", new_size); + printf("Reallocating icount %u entries...\n", new_size); #endif retval = ext2fs_resize_mem((size_t) icount->size * sizeof(struct ext2_icount_el), diff -Nru e2fsprogs-1.39/lib/ext2fs/ind_block.c e2fsprogs-1.39-tyt1/lib/ext2fs/ind_block.c --- e2fsprogs-1.39/lib/ext2fs/ind_block.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/ind_block.c 2006-10-06 23:42:54.000000000 -0400 @@ -22,9 +22,6 @@ errcode_t ext2fs_read_ind_block(ext2_filsys fs, blk_t blk, void *buf) { errcode_t retval; - blk_t *block_nr; - int i; - int limit = fs->blocksize >> 2; if ((fs->flags & EXT2_FLAG_IMAGE_FILE) && (fs->io != fs->image_io)) @@ -36,7 +33,10 @@ } #ifdef EXT2FS_ENABLE_SWAPFS if (fs->flags & (EXT2_FLAG_SWAP_BYTES | EXT2_FLAG_SWAP_BYTES_READ)) { - block_nr = (blk_t *) buf; + int limit = fs->blocksize >> 2; + blk_t *block_nr = (blk_t *)buf; + int i; + for (i = 0; i < limit; i++, block_nr++) *block_nr = ext2fs_swab32(*block_nr); } @@ -46,16 +46,15 @@ errcode_t ext2fs_write_ind_block(ext2_filsys fs, blk_t blk, void *buf) { - blk_t *block_nr; - int i; - int limit = fs->blocksize >> 2; - if (fs->flags & EXT2_FLAG_IMAGE_FILE) return 0; #ifdef EXT2FS_ENABLE_SWAPFS if (fs->flags & (EXT2_FLAG_SWAP_BYTES | EXT2_FLAG_SWAP_BYTES_WRITE)) { - block_nr = (blk_t *) buf; + int limit = fs->blocksize >> 2; + blk_t *block_nr = (blk_t *)buf; + int i; + for (i = 0; i < limit; i++, block_nr++) *block_nr = ext2fs_swab32(*block_nr); } @@ -64,3 +63,82 @@ } +errcode_t ext2fs_read_ext_block(ext2_filsys fs, blk_t blk, void *buf) +{ + errcode_t retval; + + if ((fs->flags & EXT2_FLAG_IMAGE_FILE) && + (fs->io != fs->image_io)) + memset(buf, 0, fs->blocksize); + else { + retval = io_channel_read_blk(fs->io, blk, 1, buf); + if (retval) + return retval; + } +#ifdef EXT2FS_ENABLE_SWAPFS + if (fs->flags & (EXT2_FLAG_SWAP_BYTES | EXT2_FLAG_SWAP_BYTES_READ)) { + struct ext3_extent_header *eh = buf; + int i, limit; + + ext2fs_swap_extent_header(eh); + + if (eh->eh_depth == 0) { + struct ext3_extent *ex = EXT_FIRST_EXTENT(eh); + + limit = (fs->blocksize - sizeof(*eh)) / sizeof(*ex); + if (eh->eh_entries < limit) + limit = eh->eh_entries; + + for (i = 0; i < limit; i++, ex++) + ext2fs_swap_extent(ex); + } else { + struct ext3_extent_idx *ix = EXT_FIRST_INDEX(eh); + + limit = (fs->blocksize - sizeof(*eh)) / sizeof(*ix); + if (eh->eh_entries < limit) + limit = eh->eh_entries; + + for (i = 0; i < limit; i++, ix++) + ext2fs_swap_extent_index(ix); + } + } +#endif + return 0; +} + +errcode_t ext2fs_write_ext_block(ext2_filsys fs, blk_t blk, void *buf) +{ + if (fs->flags & EXT2_FLAG_IMAGE_FILE) + return 0; + +#ifdef EXT2FS_ENABLE_SWAPFS + if (fs->flags & (EXT2_FLAG_SWAP_BYTES | EXT2_FLAG_SWAP_BYTES_WRITE)) { + struct ext3_extent_header *eh = buf; + int i, limit; + + if (eh->eh_depth == 0) { + struct ext3_extent *ex = EXT_FIRST_EXTENT(eh); + + limit = (fs->blocksize - sizeof(*eh)) / sizeof(*ex); + if (eh->eh_entries < limit) + limit = eh->eh_entries; + + for (i = 0; i < limit; i++, ex++) + ext2fs_swap_extent(ex); + } else { + struct ext3_extent_idx *ix = EXT_FIRST_INDEX(eh); + + limit = (fs->blocksize - sizeof(*eh)) / sizeof(*ix); + if (eh->eh_entries < limit) + limit = eh->eh_entries; + + for (i = 0; i < limit; i++, ix++) + ext2fs_swap_extent_index(ix); + } + + ext2fs_swap_extent_header(eh); + } +#endif + return io_channel_write_blk(fs->io, blk, 1, buf); +} + diff -Nru e2fsprogs-1.39/lib/ext2fs/initialize.c e2fsprogs-1.39-tyt1/lib/ext2fs/initialize.c --- e2fsprogs-1.39/lib/ext2fs/initialize.c 2006-03-18 18:59:47.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/initialize.c 2006-10-06 23:42:52.000000000 -0400 @@ -77,8 +77,8 @@ */ if (sb->s_blocks_count < max_blocks / 1024) max_blocks = sb->s_blocks_count * 1024; - rsv_groups = (max_blocks - sb->s_first_data_block + bpg - 1) / bpg; - rsv_gdb = (rsv_groups + gdpb - 1) / gdpb - fs->desc_blocks; + rsv_groups = ext2fs_div_ceil(max_blocks - sb->s_first_data_block, bpg); + rsv_gdb = ext2fs_div_ceil(rsv_groups, gdpb) - fs->desc_blocks; if (rsv_gdb > EXT2_ADDR_PER_BLOCK(sb)) rsv_gdb = EXT2_ADDR_PER_BLOCK(sb); #ifdef RES_GDT_DEBUG @@ -99,7 +99,6 @@ int frags_per_block; unsigned int rem; unsigned int overhead = 0; - blk_t group_block; unsigned int ipg; dgrp_t i; blk_t numblocks; @@ -205,17 +204,15 @@ } retry: - fs->group_desc_count = (super->s_blocks_count - - super->s_first_data_block + - EXT2_BLOCKS_PER_GROUP(super) - 1) - / EXT2_BLOCKS_PER_GROUP(super); + fs->group_desc_count = ext2fs_div_ceil(super->s_blocks_count - + super->s_first_data_block, + EXT2_BLOCKS_PER_GROUP(super)); if (fs->group_desc_count == 0) { retval = EXT2_ET_TOOSMALL; goto cleanup; } - fs->desc_blocks = (fs->group_desc_count + - EXT2_DESC_PER_BLOCK(super) - 1) - / EXT2_DESC_PER_BLOCK(super); + fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count, + EXT2_DESC_PER_BLOCK(super)); i = fs->blocksize >= 4096 ? 1 : 4096 / fs->blocksize; set_field(s_inodes_count, super->s_blocks_count / i); @@ -233,8 +230,7 @@ * should be. But make sure that we don't allocate more than * one bitmap's worth of inodes each group. */ - ipg = (super->s_inodes_count + fs->group_desc_count - 1) / - fs->group_desc_count; + ipg = ext2fs_div_ceil(super->s_inodes_count, fs->group_desc_count); if (ipg > fs->blocksize * 8) { if (super->s_blocks_per_group >= 256) { /* Try again with slightly different parameters */ @@ -250,9 +246,8 @@ if (ipg > (unsigned) EXT2_MAX_INODES_PER_GROUP(super)) ipg = EXT2_MAX_INODES_PER_GROUP(super); +ipg_retry: super->s_inodes_per_group = ipg; - if (super->s_inodes_count > ipg * fs->group_desc_count) - super->s_inodes_count = ipg * fs->group_desc_count; /* * Make sure the number of inodes per group completely fills @@ -280,6 +275,10 @@ /* * adjust inode count to reflect the adjusted inodes_per_group */ + if ((__u64)super->s_inodes_per_group * fs->group_desc_count > ~0U) { + ipg--; + goto ipg_retry; + } super->s_inodes_count = super->s_inodes_per_group * fs->group_desc_count; super->s_free_inodes_count = super->s_inodes_count; @@ -363,7 +362,6 @@ * inode table have not been allocated (and in fact won't be * by this routine), they are accounted for nevertheless. */ - group_block = super->s_first_data_block; super->s_free_blocks_count = 0; for (i = 0; i < fs->group_desc_count; i++) { numblocks = ext2fs_reserve_super_and_bgd(fs, i, fs->block_map); @@ -373,8 +371,6 @@ fs->group_desc[i].bg_free_inodes_count = fs->super->s_inodes_per_group; fs->group_desc[i].bg_used_dirs_count = 0; - - group_block += super->s_blocks_per_group; } ext2fs_mark_super_dirty(fs); diff -Nru e2fsprogs-1.39/lib/ext2fs/ismounted.c e2fsprogs-1.39-tyt1/lib/ext2fs/ismounted.c --- e2fsprogs-1.39/lib/ext2fs/ismounted.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/ismounted.c 2006-10-06 23:42:52.000000000 -0400 @@ -325,9 +325,9 @@ *mount_flags |= EXT2_MF_BUSY; } else close(fd); +#endif return 0; -#endif } /* diff -Nru e2fsprogs-1.39/lib/ext2fs/Makefile.in e2fsprogs-1.39-tyt1/lib/ext2fs/Makefile.in --- e2fsprogs-1.39/lib/ext2fs/Makefile.in 2006-04-08 22:02:02.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/Makefile.in 2006-10-06 23:42:54.000000000 -0400 @@ -34,6 +34,7 @@ dirhash.o \ dir_iterate.o \ expanddir.o \ + extent.o \ ext_attr.o \ finddev.o \ flushb.o \ @@ -89,6 +90,7 @@ $(srcdir)/dir_iterate.c \ $(srcdir)/dupfs.c \ $(srcdir)/expanddir.c \ + $(srcdir)/extent.c \ $(srcdir)/ext_attr.c \ $(srcdir)/fileio.c \ $(srcdir)/finddev.c \ @@ -134,7 +136,7 @@ $(srcdir)/tst_getsize.c \ $(srcdir)/tst_iscan.c -HFILES= bitops.h ext2fs.h ext2_io.h ext2_fs.h ext2_ext_attr.h +HFILES= bitops.h ext2fs.h ext2_io.h ext2_fs.h ext2_ext_attr.h ext3_extents.h HFILES_IN= ext2_err.h ext2_types.h LIBRARY= libext2fs @@ -516,6 +518,7 @@ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h valid_blk.o: $(srcdir)/valid_blk.c $(srcdir)/ext2_fs.h \ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \ + $(srcdir)/ext3_extents.h \ $(srcdir)/ext2_fs.h $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/bitops.h version.o: $(srcdir)/version.c $(srcdir)/ext2_fs.h \ diff -Nru e2fsprogs-1.39/lib/ext2fs/openfs.c e2fsprogs-1.39-tyt1/lib/ext2fs/openfs.c --- e2fsprogs-1.39/lib/ext2fs/openfs.c 2006-05-21 19:23:27.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/openfs.c 2006-10-06 23:42:54.000000000 -0400 @@ -86,6 +86,7 @@ ext2_filsys fs; errcode_t retval; unsigned long i; + __u32 features; int j, groups_per_block, blocks_per_group, io_flags; blk_t group_block, blk; char *dest, *cp; @@ -197,17 +198,27 @@ * Check for feature set incompatibility */ if (!(flags & EXT2_FLAG_FORCE)) { - if (fs->super->s_feature_incompat & - ~EXT2_LIB_FEATURE_INCOMPAT_SUPP) { + features = fs->super->s_feature_incompat; +#ifdef EXT2_LIB_SOFTSUPP_INCOMPAT + if (flags & EXT2_FLAG_SOFTSUPP_FEATURES) + features &= !EXT2_LIB_SOFTSUPP_INCOMPAT; +#endif + if (features & ~EXT2_LIB_FEATURE_INCOMPAT_SUPP) { retval = EXT2_ET_UNSUPP_FEATURE; goto cleanup; } + + features = fs->super->s_feature_ro_compat; +#ifdef EXT2_LIB_SOFTSUPP_RO_COMPAT + if (flags & EXT2_FLAG_SOFTSUPP_FEATURES) + features &= !EXT2_LIB_SOFTSUPP_RO_COMPAT; +#endif if ((flags & EXT2_FLAG_RW) && - (fs->super->s_feature_ro_compat & - ~EXT2_LIB_FEATURE_RO_COMPAT_SUPP)) { + (features & ~EXT2_LIB_FEATURE_RO_COMPAT_SUPP)) { retval = EXT2_ET_RO_UNSUPP_FEATURE; goto cleanup; } + if (!(flags & EXT2_FLAG_JOURNAL_DEV_OK) && (fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) { @@ -258,12 +269,11 @@ retval = EXT2_ET_CORRUPT_SUPERBLOCK; goto cleanup; } - fs->group_desc_count = (fs->super->s_blocks_count - - fs->super->s_first_data_block + - blocks_per_group - 1) / blocks_per_group; - fs->desc_blocks = (fs->group_desc_count + - EXT2_DESC_PER_BLOCK(fs->super) - 1) - / EXT2_DESC_PER_BLOCK(fs->super); + fs->group_desc_count = ext2fs_div_ceil(fs->super->s_blocks_count - + fs->super->s_first_data_block, + blocks_per_group); + fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count, + EXT2_DESC_PER_BLOCK(fs->super)); retval = ext2fs_get_mem(fs->desc_blocks * fs->blocksize, &fs->group_desc); if (retval) diff -Nru e2fsprogs-1.39/lib/ext2fs/swapfs.c e2fsprogs-1.39-tyt1/lib/ext2fs/swapfs.c --- e2fsprogs-1.39/lib/ext2fs/swapfs.c 2006-04-23 12:47:16.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/swapfs.c 2006-10-06 23:42:54.000000000 -0400 @@ -120,6 +120,31 @@ } } +void ext2fs_swap_extent_header(struct ext3_extent_header *eh) +{ + eh->eh_magic = ext2fs_swab16(eh->eh_magic); + eh->eh_entries = ext2fs_swab16(eh->eh_entries); + eh->eh_max = ext2fs_swab16(eh->eh_max); + eh->eh_depth = ext2fs_swab16(eh->eh_depth); + eh->eh_generation = ext2fs_swab32(eh->eh_generation); +} + +void ext2fs_swap_extent_index(struct ext3_extent_idx *ix) +{ + ix->ei_block = ext2fs_swab32(ix->ei_block); + ix->ei_leaf = ext2fs_swab32(ix->ei_leaf); + ix->ei_leaf_hi = ext2fs_swab16(ix->ei_leaf_hi); + ix->ei_unused = ext2fs_swab16(ix->ei_unused); +} + +void ext2fs_swap_extent(struct ext3_extent *ex) +{ + ex->ee_block = ext2fs_swab32(ex->ee_block); + ex->ee_len = ext2fs_swab16(ex->ee_len); + ex->ee_start_hi =ext2fs_swab16(ex->ee_start_hi); + ex->ee_start = ext2fs_swab32(ex->ee_start); +} + void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t, struct ext2_inode_large *f, int hostorder, int bufsize) diff -Nru e2fsprogs-1.39/lib/ext2fs/tst_badblocks.c e2fsprogs-1.39-tyt1/lib/ext2fs/tst_badblocks.c --- e2fsprogs-1.39/lib/ext2fs/tst_badblocks.c 2005-12-18 23:25:18.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/tst_badblocks.c 2006-10-06 23:42:52.000000000 -0400 @@ -103,7 +103,7 @@ } ok = i = 1; while (ext2fs_badblocks_list_iterate(iter, &blk)) { - printf("%d ", blk); + printf("%u ", blk); if (i++ != blk) ok = 0; } @@ -130,7 +130,7 @@ ok = 0; test_fail++; } - printf("\tblock %d is %s --- %s\n", vec[i], + printf("\tblock %u is %s --- %s\n", vec[i], match ? "present" : "absent", ok ? "OK" : "NOT OK"); } @@ -145,7 +145,7 @@ case ADD_BLK: ext2fs_badblocks_list_add(bb, vec[i]); match = ext2fs_badblocks_list_test(bb, vec[i]); - printf("Adding block %d --- now %s\n", vec[i], + printf("Adding block %u --- now %s\n", vec[i], match ? "present" : "absent"); if (!match) { printf("FAILURE!\n"); @@ -155,7 +155,7 @@ case DEL_BLK: ext2fs_badblocks_list_del(bb, vec[i]); match = ext2fs_badblocks_list_test(bb, vec[i]); - printf("Removing block %d --- now %s\n", vec[i], + printf("Removing block %u --- now %s\n", vec[i], ext2fs_badblocks_list_test(bb, vec[i]) ? "present" : "absent"); if (match) { @@ -209,7 +209,7 @@ printf("Expected invalid block\n"); test_expected_fail++; } else { - printf("Invalid block #: %d\n", blk); + printf("Invalid block #: %u\n", blk); test_fail++; } } diff -Nru e2fsprogs-1.39/lib/ext2fs/tst_getsize.c e2fsprogs-1.39-tyt1/lib/ext2fs/tst_getsize.c --- e2fsprogs-1.39/lib/ext2fs/tst_getsize.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/tst_getsize.c 2006-10-06 23:42:52.000000000 -0400 @@ -39,6 +39,6 @@ com_err(argv[0], retval, "while getting device size"); exit(1); } - printf("%s is device has %d blocks.\n", argv[1], blocks); + printf("%s is device has %u blocks.\n", argv[1], blocks); return 0; } diff -Nru e2fsprogs-1.39/lib/ext2fs/tst_iscan.c e2fsprogs-1.39-tyt1/lib/ext2fs/tst_iscan.c --- e2fsprogs-1.39/lib/ext2fs/tst_iscan.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/tst_iscan.c 2006-10-06 23:42:52.000000000 -0400 @@ -175,7 +175,7 @@ for (i=0; test_vec[i]; i++) { if (ext2fs_test_block_bitmap(touched_map, test_vec[i])) { - printf("Bad block was touched --- %d\n", test_vec[i]); + printf("Bad block was touched --- %u\n", test_vec[i]); failed++; first_no_comma = 1; } @@ -199,7 +199,7 @@ first = 0; else printf(", "); - printf("%d", i); + printf("%u", i); } } printf("\n"); diff -Nru e2fsprogs-1.39/lib/ext2fs/unix_io.c e2fsprogs-1.39-tyt1/lib/ext2fs/unix_io.c --- e2fsprogs-1.39/lib/ext2fs/unix_io.c 2006-03-17 22:46:30.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/unix_io.c 2006-10-06 23:42:52.000000000 -0400 @@ -170,8 +170,8 @@ size = (count < 0) ? -count : count * channel->block_size; location = ((ext2_loff_t) block * channel->block_size) + data->offset; #ifdef DEBUG - printf("count=%d, size=%d, block=%d, blk_size=%d, location=%lx\n", - count, size, block, channel->block_size, location); + printf("count=%d, size=%d, block=%lu, blk_size=%d, location=%llx\n", + count, size, block, channel->block_size, (long long)location); #endif if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) { retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; @@ -553,7 +553,7 @@ /* If it's in the cache, use it! */ if ((cache = find_cached_block(data, block, &reuse[0]))) { #ifdef DEBUG - printf("Using cached block %d\n", block); + printf("Using cached block %lu\n", block); #endif memcpy(cp, cache->buf, channel->block_size); count--; @@ -569,7 +569,7 @@ if (find_cached_block(data, block+i, &reuse[i])) break; #ifdef DEBUG - printf("Reading %d blocks starting at %d\n", i, block); + printf("Reading %d blocks starting at %lu\n", i, block); #endif if ((retval = raw_read_blk(channel, data, block, i, cp))) return retval; diff -Nru e2fsprogs-1.39/lib/ext2fs/valid_blk.c e2fsprogs-1.39-tyt1/lib/ext2fs/valid_blk.c --- e2fsprogs-1.39/lib/ext2fs/valid_blk.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/valid_blk.c 2006-10-06 23:42:54.000000000 -0400 @@ -19,6 +19,7 @@ #include "ext2_fs.h" #include "ext2fs.h" +#include "ext3_extents.h" /* * This function returns 1 if the inode's block entries actually @@ -41,12 +42,23 @@ if (LINUX_S_ISLNK (inode->i_mode)) { if (inode->i_file_acl == 0) { /* With no EA block, we can rely on i_blocks */ - if (inode->i_blocks == 0) - return 0; + if (inode->i_flags & EXT4_EXTENTS_FL) { + struct ext3_extent_header *eh; + eh = (struct ext3_extent_header *)inode->i_block; + if (eh->eh_entries == 0) + return 0; + } else { + if (inode->i_blocks == 0) + return 0; + } } else { /* With an EA block, life gets more tricky */ if (inode->i_size >= EXT2_N_BLOCKS*4) return 1; /* definitely using i_block[] */ + /* + * we cant have EA + extents, so assume we aren't + * using extents + */ if (inode->i_size > 4 && inode->i_block[1] == 0) return 1; /* definitely using i_block[] */ return 0; /* Probably a fast symlink */ diff -Nru e2fsprogs-1.39/lib/ext2fs/write_bb_file.c e2fsprogs-1.39-tyt1/lib/ext2fs/write_bb_file.c --- e2fsprogs-1.39/lib/ext2fs/write_bb_file.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ext2fs/write_bb_file.c 2006-10-06 23:42:52.000000000 -0400 @@ -27,7 +27,7 @@ return retval; while (ext2fs_badblocks_list_iterate(bb_iter, &blk)) { - fprintf(f, "%d\n", blk); + fprintf(f, "%u\n", blk); } ext2fs_badblocks_list_iterate_end(bb_iter); return 0; diff -Nru e2fsprogs-1.39/lib/ss/ChangeLog e2fsprogs-1.39-tyt1/lib/ss/ChangeLog --- e2fsprogs-1.39/lib/ss/ChangeLog 2005-12-10 22:18:57.000000000 -0500 +++ e2fsprogs-1.39-tyt1/lib/ss/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,8 @@ +2006-08-05 Theodore Tso + + * mk_cmds.sh.in: Create the generated .c files read-only to remind + developers they shouldn't edit them. + 2005-12-10 Theodore Ts'o * Makefile.in: Add a dependency to make sure that the diff -Nru e2fsprogs-1.39/lib/ss/mk_cmds.sh.in e2fsprogs-1.39-tyt1/lib/ss/mk_cmds.sh.in --- e2fsprogs-1.39/lib/ss/mk_cmds.sh.in 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/lib/ss/mk_cmds.sh.in 2006-10-06 23:42:52.000000000 -0400 @@ -43,6 +43,7 @@ exit 1 else rm -f "${BASE}.c" - mv "${TMP}" "${BASE}.c" + mv -f "${TMP}" "${BASE}.c" + chmod -w "${BASE}.c" exit 0 fi diff -Nru e2fsprogs-1.39/Makefile.in e2fsprogs-1.39-tyt1/Makefile.in --- e2fsprogs-1.39/Makefile.in 2006-04-08 22:16:26.000000000 -0400 +++ e2fsprogs-1.39-tyt1/Makefile.in 2006-10-06 23:42:52.000000000 -0400 @@ -29,6 +29,9 @@ progs: subs all-progs-recursive libs: subs all-libs-recursive +rpm: + sh contrib/build-rpm + docs: -@test -d doc && cd doc && $(MAKE) libext2fs.info diff -Nru e2fsprogs-1.39/MCONFIG.in e2fsprogs-1.39-tyt1/MCONFIG.in --- e2fsprogs-1.39/MCONFIG.in 2006-03-22 20:19:19.000000000 -0500 +++ e2fsprogs-1.39-tyt1/MCONFIG.in 2006-10-06 23:42:52.000000000 -0400 @@ -33,7 +33,7 @@ CC = @CC@ BUILD_CC = @BUILD_CC@ -DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ +DEFS = -DLOCALEDIR=\"$(localedir)\" -DROOT_SYSCONFDIR=\"$(root_sysconfdir)\" @DEFS@ CFLAGS = @CFLAGS@ CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib @CPPFLAGS@ INTL_FLAGS = @INTL_FLAGS@ @@ -76,9 +76,10 @@ LIBE2P = $(LIB)/libe2p@LIB_EXT@ LIBEXT2FS = $(LIB)/libext2fs@LIB_EXT@ LIBUUID = $(LIB)/libuuid@LIB_EXT@ @SOCKET_LIB@ -LIBBLKID = $(LIB)/libblkid@LIB_EXT@ $(DEVMAPPER_LIBS) +LIBBLKID = $(LIB)/libblkid@LIB_EXT@ LIBINTL = @LIBINTL@ DEPLIBUUID = $(LIB)/libuuid@LIB_EXT@ +DEPLIBBLKID = $(LIB)/libblkid@LIB_EXT@ STATIC_LIBSS = $(LIB)/libss@STATIC_LIB_EXT@ STATIC_LIBCOM_ERR = $(LIB)/libcom_err@STATIC_LIB_EXT@ @@ -87,6 +88,7 @@ STATIC_LIBUUID = $(LIB)/libuuid@STATIC_LIB_EXT@ @SOCKET_LIB@ STATIC_LIBBLKID = $(LIB)/libblkid@STATIC_LIB_EXT@ $(STATIC_DEVMAPPER_LIBS) DEPSTATIC_LIBUUID = $(LIB)/libuuid@STATIC_LIB_EXT@ +DEPSTATIC_LIBBLKID = $(LIB)/libblkid@STATIC_LIB_EXT@ PROFILED_LIBSS = $(LIB)/libss@PROFILED_LIB_EXT@ PROFILED_LIBCOM_ERR = $(LIB)/libcom_err@PROFILED_LIB_EXT@ @@ -95,6 +97,7 @@ PROFILED_LIBUUID = $(LIB)/libuuid@PROFILED_LIB_EXT@ @SOCKET_LIB@ PROFILED_LIBBLKID = $(LIB)/libblkid@PROFILED_LIB_EXT@ DEPPROFILED_LIBUUID = $(LIB)/libuuid@PROFILED_LIB_EXT@ +DEPPROFILED_LIBBLKID = $(LIB)/libblkid@PROFILED_LIB_EXT@ # An include directive pointing to a directory holding enough linux-like # include files to satisfy some programs here diff -Nru e2fsprogs-1.39/misc/badblocks.c e2fsprogs-1.39-tyt1/misc/badblocks.c --- e2fsprogs-1.39/misc/badblocks.c 2006-05-13 09:15:18.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/badblocks.c 2006-10-06 23:42:52.000000000 -0400 @@ -350,7 +350,7 @@ } if (v_flag) { fprintf (stderr, _("Checking blocks %lu to %lu\n"), from_count, - last_block); + last_block - 1); } if (t_flag) { fputs(_("Checking for bad blocks in read-only mode\n"), stderr); @@ -360,7 +360,7 @@ flush_bufs(); try = blocks_at_once; currently_testing = from_count; - num_blocks = last_block; + num_blocks = last_block - 1; if (!t_flag && (s_flag || v_flag)) { fputs(_("Checking for bad blocks (read-only test): "), stderr); if (v_flag <= 1) @@ -457,7 +457,7 @@ for (pat_idx = 0; pat_idx < nr_pattern; pat_idx++) { pattern_fill(buffer, pattern[pat_idx], blocks_at_once * block_size); - num_blocks = last_block; + num_blocks = last_block - 1; currently_testing = from_count; if (s_flag && v_flag <= 1) alarm_intr(SIGALRM); @@ -633,7 +633,7 @@ save_ptr = save_base; test_ptr = test_base; currently_testing = from_count; - num_blocks = last_block; + num_blocks = last_block - 1; if (s_flag && v_flag <= 1) alarm_intr(SIGALRM); @@ -979,7 +979,7 @@ exit(1); } } else { - last_block = strtoul (argv[optind], &tmp, 0); + last_block = strtoul (argv[optind], &tmp, 0) + 1; if (*tmp) { com_err (program_name, 0, _("invalid blocks count - %s"), argv[optind]); diff -Nru e2fsprogs-1.39/misc/blkid.8.in e2fsprogs-1.39-tyt1/misc/blkid.8.in --- e2fsprogs-1.39/misc/blkid.8.in 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/blkid.8.in 2006-10-06 23:42:52.000000000 -0400 @@ -64,30 +64,16 @@ Display a usage message and exit. .TP .B \-l -Look up the device that matches the search parameter specified using +Look up one device that matches the search parameter specified using the .B \-t -option, assuming that there is only one matching the search parameter. -For a system with a large number of disks, this will be more -efficient by avoiding the need to revalidate devices unless absolutely -necessary. If this option is not specified, +option. If there are multiple devices that match the specified search +parameter, then the device with the highest priority is returned, and/or +the first device found at a given priority. Device types in order of +decreasing priority are Device Mapper, EVMS, LVM, MD, and finally regular +block devices. If this option is not specified, .B blkid -will use a less efficient approach, which allows -.B blkid -to print all of the devices that match the search parameter. -.IP -This option is best used for tag searches such as -.I LABEL=data_vol -or -.IR UUID=e280469a-d06f-4c0b-b068-44f3b576029e . -If you want -.B blkid -to print all of the ext3 filesystems using a search parameter -such as -.IR TYPE=ext3 , -then this option should -.I not -be used. +will print all of the devices that match the search parameter. .TP .B \-o Display diff -Nru e2fsprogs-1.39/misc/blkid.c e2fsprogs-1.39-tyt1/misc/blkid.c --- e2fsprogs-1.39/misc/blkid.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/blkid.c 2006-10-06 23:42:52.000000000 -0400 @@ -15,6 +15,7 @@ #ifdef HAVE_GETOPT_H #include #else +extern int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind; #endif diff -Nru e2fsprogs-1.39/misc/ChangeLog e2fsprogs-1.39-tyt1/misc/ChangeLog --- e2fsprogs-1.39/misc/ChangeLog 2006-05-29 11:03:04.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,110 @@ +2006-10-03 Theodore Tso + + * badblocks.c: Fix the interpretation of the last_block parameter + on the command line, and adjust the last block count + displays in the progress messages. + (Addresses Debian Bug #386475) + +2006-10-02 Theodore Tso + + * util.c (figure_journal_size): Increase the smallest default + journal size from 1024 to 1400 to make sure it is big + enough for on-line resizing. + +2006-10-01 Theodore Tso + + * Makefile.in (DEPLIBBLKID): Use DEPLIBBLKID not LIBBLKID to + define the dependencies used by the blkid library. + +2006-09-29 Theodore Tso + + * Makefile.in: Fix makefile so that it is robust if the e2fsck + directory hasn't been built yet. (Addresses Sourceforge + bug #1565561) + +2006-08-30 Eric Sandeen + + * mke2fs.c (PRS): Avoid overflow in megs calculation. + +2006-08-30 Eric Sandeen + + * mke2fs.c (PRS): Disallow > 2^32 inodes at mkfs time. + +2006-08-30 Eric Sandeen + + * dumpe2fs.c (list_desc): Use new inlines to calculate group + first & last blocks. + +2006-08-30 Eric Sandeen + + * dumpe2fs.c (list_bad_blocks): + * e2image.c (output_meta_data_blocks, write_raw_image_file): + * mke2fs.c (test_disk, handle_bad_blocks): Fix printf formats. + +2006-08-30 Eric Sandeen + + * e2image.c (mark_table_blocks): Remove unused first_block + incrementing from loop. + +2006-08-30 Eric Sandeen + + * dumpe2fs.c (list_desc, mark_table_blocks): Avoid overflows when + iterating over group descriptors on very large + filesystems. + + * e2image.c (mark_table_blocks): Change block group loop to use a + common pattern of first_block/last_block, etc. + +2006-09-12 Theodore Tso + + * tune2fs.8.in, uuidgen.1: Fix minor grammar problems. Addresses + Debian Bug #373004) + +2006-08-30 Theodore Tso + + * tune2fs.c (main), mke2fs.c (PRS): Use e2p_percent to properly + calculate the number of reserved blocks without worrying + about overflow. + + * Makefile.in (resize2fs): Remove unused (and bogus) resize2fs + rule, which shouldn't be in misc/Makefile.in + + * mke2fs.c (parse_extended_opts): Use ext2fs_div_ceil() instead of + a using an open-coded expression which was subject to + overflows. + + * filefrag.c (div_ceil, frag_report): Fix potential overflow for + really big filesystems. + +2006-08-06 Theodore Tso + + * findsuper.c (main): Improve findsuper program by printing the + uuid and label from the superblocks, as well as the + starting and ending offsets of the filesystem given the + information in the superblock. Omit by default printing + superblocks that are likely found in located in an ext3 + journal unless an explicit -j option is given. + +2006-08-05 Theodore Tso + + * mke2fs.c (PRS), util.c (check_mount): In order to force mke2fs + to create a filesystem even though it appears to be in use + or mounted, the -F (force) flag must be specified twice. + + * filefrag.c: Change EXT3_EXTENTS_FL to EXT4_EXTENTS_FL + +2006-07-15 Theodore Tso + + * mke2fs.c (PRS): Look up the default inode size in the + mke2fs.conf file. + + * mke2fs.8.in, mke2fs.c(usage): Document the -I option. + + * mke2fs.conf.5.in: Document the inode_size relation in [defaults] + and [fs_types]. + + * chattr.1.in: Fix spelling typo + 2006-05-29 Theodore Tso * filefrag.c: Add support for ancient Linux systems that do not diff -Nru e2fsprogs-1.39/misc/chattr.1.in e2fsprogs-1.39-tyt1/misc/chattr.1.in --- e2fsprogs-1.39/misc/chattr.1.in 2005-12-31 01:00:53.000000000 -0500 +++ e2fsprogs-1.39-tyt1/misc/chattr.1.in 2006-10-06 23:42:52.000000000 -0400 @@ -73,7 +73,7 @@ .BR lsattr (1). .PP The 'I' attribute is used by the htree code to indicate that a directory -is behind indexed using hashed trees. It may not be set or reset using +is being indexed using hashed trees. It may not be set or reset using .BR chattr (1), although it can be displayed by .BR lsattr (1). diff -Nru e2fsprogs-1.39/misc/dumpe2fs.c e2fsprogs-1.39-tyt1/misc/dumpe2fs.c --- e2fsprogs-1.39/misc/dumpe2fs.c 2006-05-08 11:38:05.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/dumpe2fs.c 2006-10-06 23:42:52.000000000 -0400 @@ -130,7 +130,7 @@ { unsigned long i; long diff; - blk_t group_blk, next_blk; + blk_t first_block, last_block; blk_t super_blk, old_desc_blk, new_desc_blk; char *block_bitmap=NULL, *inode_bitmap=NULL; int inode_blocks_per_group, old_desc_blocks, reserved_gdt; @@ -147,19 +147,20 @@ EXT2_BLOCK_SIZE(fs->super); reserved_gdt = fs->super->s_reserved_gdt_blocks; fputc('\n', stdout); - group_blk = fs->super->s_first_data_block; + first_block = fs->super->s_first_data_block; if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) old_desc_blocks = fs->super->s_first_meta_bg; else old_desc_blocks = fs->desc_blocks; for (i = 0; i < fs->group_desc_count; i++) { + first_block = ext2fs_group_first_block(fs, i); + last_block = ext2fs_group_last_block(fs, i); + ext2fs_super_and_bgd_loc(fs, i, &super_blk, &old_desc_blk, &new_desc_blk, 0); - next_blk = group_blk + fs->super->s_blocks_per_group; - if (next_blk > fs->super->s_blocks_count) - next_blk = fs->super->s_blocks_count; + printf (_("Group %lu: (Blocks "), i); - print_range(group_blk, next_blk - 1); + print_range(first_block, last_block); fputs(")", stdout); print_bg_opts(fs, i); has_super = ((i==0) || super_blk); @@ -188,19 +189,19 @@ fputc('\n', stdout); fputs(_(" Block bitmap at "), stdout); print_number(fs->group_desc[i].bg_block_bitmap); - diff = fs->group_desc[i].bg_block_bitmap - group_blk; + diff = fs->group_desc[i].bg_block_bitmap - first_block; if (diff >= 0) printf(" (+%ld)", diff); fputs(_(", Inode bitmap at "), stdout); print_number(fs->group_desc[i].bg_inode_bitmap); - diff = fs->group_desc[i].bg_inode_bitmap - group_blk; + diff = fs->group_desc[i].bg_inode_bitmap - first_block; if (diff >= 0) printf(" (+%ld)", diff); fputs(_("\n Inode table at "), stdout); print_range(fs->group_desc[i].bg_inode_table, fs->group_desc[i].bg_inode_table + inode_blocks_per_group - 1); - diff = fs->group_desc[i].bg_inode_table - group_blk; + diff = fs->group_desc[i].bg_inode_table - first_block; if (diff > 0) printf(" (+%ld)", diff); printf (_("\n %d free blocks, %d free inodes, " @@ -223,7 +224,6 @@ fputc('\n', stdout); inode_bitmap += fs->super->s_inodes_per_group / 8; } - group_blk = next_blk; } } @@ -247,10 +247,10 @@ return; } if (dump) { - header = fmt = "%d\n"; + header = fmt = "%u\n"; } else { - header = _("Bad blocks: %d"); - fmt = ", %d"; + header = _("Bad blocks: %u"); + fmt = ", %u"; } while (ext2fs_badblocks_list_iterate(bb_iter, &blk)) { printf(header ? header : fmt, blk); @@ -310,10 +310,10 @@ "Journal first block: %u\n" "Journal sequence: 0x%08x\n" "Journal start: %u\n" - "Journal number of users: %lu\n"), - ntohl(jsb->s_blocksize), ntohl(jsb->s_maxlen), - ntohl(jsb->s_first), ntohl(jsb->s_sequence), - ntohl(jsb->s_start), ntohl(jsb->s_nr_users)); + "Journal number of users: %u\n"), + (unsigned int)ntohl(jsb->s_blocksize), (unsigned int)ntohl(jsb->s_maxlen), + (unsigned int)ntohl(jsb->s_first), (unsigned int)ntohl(jsb->s_sequence), + (unsigned int)ntohl(jsb->s_start), (unsigned int)ntohl(jsb->s_nr_users)); for (i=0; i < ntohl(jsb->s_nr_users); i++) { uuid_unparse(&jsb->s_users[i*16], str); diff -Nru e2fsprogs-1.39/misc/e2image.c e2fsprogs-1.39-tyt1/misc/e2image.c --- e2fsprogs-1.39/misc/e2image.c 2006-03-18 21:34:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/misc/e2image.c 2006-10-06 23:42:52.000000000 -0400 @@ -244,21 +244,21 @@ static void mark_table_blocks(ext2_filsys fs) { - blk_t block, b; + blk_t first_block, b; unsigned int i,j; - block = fs->super->s_first_data_block; + first_block = fs->super->s_first_data_block; /* * Mark primary superblock */ - ext2fs_mark_block_bitmap(meta_block_map, block); + ext2fs_mark_block_bitmap(meta_block_map, first_block); /* * Mark the primary superblock descriptors */ for (j = 0; j < fs->desc_blocks; j++) { ext2fs_mark_block_bitmap(meta_block_map, - ext2fs_descriptor_block_loc(fs, block, j)); + ext2fs_descriptor_block_loc(fs, first_block, j)); } for (i = 0; i < fs->group_desc_count; i++) { @@ -287,7 +287,6 @@ ext2fs_mark_block_bitmap(meta_block_map, fs->group_desc[i].bg_inode_bitmap); } - block += fs->super->s_blocks_per_group; } } @@ -418,7 +417,7 @@ retval = io_channel_read_blk(fs->io, blk, 1, buf); if (retval) { com_err(program_name, retval, - "error reading block %d", blk); + "error reading block %u", blk); } if (scramble_block_map && ext2fs_test_block_bitmap(scramble_block_map, blk)) @@ -517,7 +516,7 @@ block_buf, process_dir_block, &pb); if (retval) { com_err(program_name, retval, - "while iterating over inode %d", + "while iterating over inode %u", ino); exit(1); } @@ -530,7 +529,7 @@ process_file_block, &pb); if (retval) { com_err(program_name, retval, - "while iterating over %d", ino); + "while iterating over inode %u", ino); exit(1); } } diff -Nru e2fsprogs-1.39/misc/filefrag.c e2fsprogs-1.39-tyt1/misc/filefrag.c --- e2fsprogs-1.39/misc/filefrag.c 2006-05-28 20:51:47.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/filefrag.c 2006-10-06 23:42:52.000000000 -0400 @@ -44,9 +44,16 @@ #define FIBMAP _IO(0x00,1) /* bmap access */ #define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */ -#define EXT3_EXTENTS_FL 0x00080000 /* Inode uses extents */ +#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */ #define EXT3_IOC_GETFLAGS _IOR('f', 1, long) +static unsigned int div_ceil(unsigned int a, unsigned int b) +{ + if (!a) + return 0; + return ((a - 1) / b) + 1; +} + static unsigned long get_bmap(int fd, unsigned long block) { int ret; @@ -105,7 +112,7 @@ if (verbose) { printf("Filesystem type is: %x\n", fsinfo.f_type); } - cylgroups = (fsinfo.f_blocks + fsinfo.f_bsize*8-1) / fsinfo.f_bsize*8; + cylgroups = div_ceil(fsinfo.f_blocks, fsinfo.f_bsize*8); if (verbose) { printf("Filesystem cylinder groups is approximately %ld\n", cylgroups); @@ -126,7 +133,7 @@ } if (ioctl(fd, EXT3_IOC_GETFLAGS, &flags) < 0) flags = 0; - if (flags & EXT3_EXTENTS_FL) { + if (flags & EXT4_EXTENTS_FL) { printf("File is stored in extents format\n"); is_ext2 = 0; } diff -Nru e2fsprogs-1.39/misc/findsuper.c e2fsprogs-1.39-tyt1/misc/findsuper.c --- e2fsprogs-1.39/misc/findsuper.c 2006-03-18 21:34:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/misc/findsuper.c 2006-10-06 23:42:52.000000000 -0400 @@ -102,6 +102,14 @@ #define WHY(fmt, arg...) { continue; } #endif +static void usage(void) +{ + fprintf(stderr, + _("Usage: findsuper device [skipbytes [startkb]]\n")); + exit(1); +} + + int main(int argc, char *argv[]) { int skiprate=512; /* one sector */ @@ -110,7 +118,8 @@ char *s; time_t tm, last = time(0); loff_t interval = 1024 * 1024; - + int c, print_jnl_copies = 0; + const char * device_name; struct ext2_super_block ext2; /* interesting fields: EXT2_SUPER_MAGIC * s_blocks_count s_log_block_size s_mtime s_magic s_lastcheck */ @@ -121,43 +130,66 @@ bindtextdomain(NLS_CAT_NAME, LOCALEDIR); textdomain(NLS_CAT_NAME); #endif - if (argc<2) { - fprintf(stderr, - _("Usage: findsuper device [skipbytes [startkb]]\n")); - exit(1); + + while ((c = getopt (argc, argv, "j")) != EOF) { + switch (c) { + case 'j': + print_jnl_copies++; + break; + default: + usage(); + } } - if (argc>2) - skiprate = strtol(argv[2], &s, 0); - if (s == argv[2]) { - fprintf(stderr,_("skipbytes should be a number, not %s\n"), s); - exit(1); + + if (optind == argc) + usage(); + + device_name = argv[optind++]; + + if (optind < argc) { + skiprate = strtol(argv[optind], &s, 0); + if (s == argv[optind]) { + fprintf(stderr,_("skipbytes should be a number, not %s\n"), s); + exit(1); + } + optind++; } if (skiprate & 0x1ff) { fprintf(stderr, _("skipbytes must be a multiple of the sector size\n")); exit(2); } - if (argc>3) - sk = skl = strtoll(argv[3], &s, 0) << 10; - if (s == argv[3]) { - fprintf(stderr,_("startkb should be a number, not %s\n"), s); - exit(1); + if (optind < argc) { + sk = skl = strtoll(argv[optind], &s, 0) << 10; + if (s == argv[optind]) { + fprintf(stderr, + _("startkb should be a number, not %s\n"), s); + exit(1); + } + optind++; } if (sk < 0) { - fprintf(stderr,_("startkb should be positive, not %Ld\n"), sk); + fprintf(stderr, _("startkb should be positive, not %Lu\n"), sk); exit(1); } - fd = open(argv[1], O_RDONLY); + + fd = open(device_name, O_RDONLY); if (fd < 0) { - perror(argv[1]); + perror(device_name); exit(1); } - + /* Now, go looking for the superblock! */ - printf(_("starting at %Ld, with %d byte increments\n"), sk, skiprate); - printf(_(" thisoff block fs_blk_sz blksz grp last_mount\n")); + printf(_("starting at %Lu, with %u byte increments\n"), sk, skiprate); + if (print_jnl_copies) + printf(_("[*] probably superblock written in the ext3 " + "journal superblock,\n\tso start/end/grp wrong\n")); + printf(_("byte_offset byte_start byte_end fs_blocks blksz grp last_mount_time sb_uuid label\n")); for (; lseek64(fd, sk, SEEK_SET) != -1 && read(fd, &ext2, 512) == 512; sk += skiprate) { + static unsigned char last_uuid[16] = "blah"; + unsigned long long bsize, grpsize; + int jnl_copy, sb_offset; if (sk && !(sk & (interval - 1))) { time_t now, diff; @@ -168,7 +200,7 @@ if (diff > 0) { s = ctime(&now); s[24] = 0; - printf("\r%14Ld: %8LdkB/s @ %s", sk, + printf("\r%11Lu: %8LukB/s @ %s", sk, (((sk - skl)) / diff) >> 10, s); fflush(stdout); } @@ -181,8 +213,8 @@ } if (ext2.s_magic != EXT2_SUPER_MAGIC) continue; - if (ext2.s_log_block_size > 4) - WHY("log block size > 4 (%u)\n", ext2.s_log_block_size); + if (ext2.s_log_block_size > 6) + WHY("log block size > 6 (%u)\n", ext2.s_log_block_size); if (ext2.s_r_blocks_count > ext2.s_blocks_count) WHY("r_blocks_count > blocks_count (%u > %u)\n", ext2.s_r_blocks_count, ext2.s_blocks_count); @@ -194,14 +226,34 @@ ext2.s_free_inodes_count, ext2.s_inodes_count); tm = ext2.s_mtime; - s=ctime(&tm); - s[24]=0; - printf("\r%14Ld %9Ld %9d %5d %4d %s\n", - sk, sk >> 10, ext2.s_blocks_count, - 1 << (ext2.s_log_block_size + 10), - ext2.s_block_group_nr, s); + s = ctime(&tm); + s[24] = 0; + bsize = 1 << (ext2.s_log_block_size + 10); + grpsize = bsize * ext2.s_blocks_per_group; + if (memcmp(ext2.s_uuid, last_uuid, sizeof(last_uuid)) == 0 && + ext2.s_rev_level > 0 && ext2.s_block_group_nr == 0) { + jnl_copy = 1; + } else { + jnl_copy = 0; + memcpy(last_uuid, ext2.s_uuid, sizeof(last_uuid)); + } + if (ext2.s_block_group_nr == 0 || bsize == 1024) + sb_offset = 1024; + else + sb_offset = 0; + if (jnl_copy && !print_jnl_copies) + continue; + printf("\r%11Lu %11Lu%s %11Lu%s %9u %5Lu %4u%s %s %02x%02x%02x%02x %s\n", + sk, sk - ext2.s_block_group_nr * grpsize - sb_offset, + jnl_copy ? "*":" ", + sk + ext2.s_blocks_count * bsize - + ext2.s_block_group_nr * grpsize - sb_offset, + jnl_copy ? "*" : " ", ext2.s_blocks_count, bsize, + ext2.s_block_group_nr, jnl_copy ? "*" : " ", s, + ext2.s_uuid[0], ext2.s_uuid[1], + ext2.s_uuid[2], ext2.s_uuid[3], ext2.s_volume_name); } - printf(_("\n%14Ld: finished with errno %d\n"), sk, errno); + printf(_("\n%11Lu: finished with errno %d\n"), sk, errno); close(fd); return errno; diff -Nru e2fsprogs-1.39/misc/Makefile.in e2fsprogs-1.39-tyt1/misc/Makefile.in --- e2fsprogs-1.39/misc/Makefile.in 2006-03-27 00:58:10.000000000 -0500 +++ e2fsprogs-1.39-tyt1/misc/Makefile.in 2006-10-06 23:42:52.000000000 -0400 @@ -29,7 +29,7 @@ TUNE2FS_OBJS= tune2fs.o util.o MKLPF_OBJS= mklost+found.o -MKE2FS_OBJS= mke2fs.o util.o ../e2fsck/profile.o +MKE2FS_OBJS= mke2fs.o util.o profile.o CHATTR_OBJS= chattr.o LSATTR_OBJS= lsattr.o UUIDGEN_OBJS= uuidgen.o @@ -40,13 +40,14 @@ BLKID_OBJS= blkid.o FILEFRAG_OBJS= filefrag.o -XTRA_CFLAGS= -I$(srcdir)/../e2fsck +XTRA_CFLAGS= -I$(srcdir)/../e2fsck -I. SRCS= $(srcdir)/tune2fs.c $(srcdir)/mklost+found.c $(srcdir)/mke2fs.c \ $(srcdir)/chattr.c $(srcdir)/lsattr.c $(srcdir)/dumpe2fs.c \ $(srcdir)/badblocks.c $(srcdir)/fsck.c $(srcdir)/util.c \ $(srcdir)/uuidgen.c $(srcdir)/blkid.c $(srcdir)/logsave.c \ - $(srcdir)/filefrag.c $(srcdir)/base_device.c + $(srcdir)/filefrag.c $(srcdir)/base_device.c \ + $(srcdir)/../e2fsck/profile.c LIBS= $(LIBEXT2FS) $(LIBCOM_ERR) DEPLIBS= $(LIBEXT2FS) $(LIBCOM_ERR) @@ -55,11 +56,13 @@ STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) LIBS_BLKID= $(LIBBLKID) $(LIBUUID) -DEPLIBS_BLKID= $(LIBBLKID) $(DEPLIBUUID) +DEPLIBS_BLKID= $(DEPLIBBLKID) $(DEPLIBUUID) LIBS_E2P= $(LIBE2P) $(LIBCOM_ERR) DEPLIBS_E2P= $(LIBE2P) $(LIBCOM_ERR) +COMPILE_ET=$(top_builddir)/lib/et/compile_et --build-tree + .c.o: @echo " CC $<" @$(CC) -c $(ALL_CFLAGS) $< -o $@ @@ -67,6 +70,14 @@ all:: $(SPROGS) $(UPROGS) $(USPROGS) $(SMANPAGES) $(UMANPAGES) \ $(FMANPAGES) $(LPROGS) +prof_err.c prof_err.h: $(srcdir)/../e2fsck/prof_err.et + @echo " COMPILE_ET prof_err.et" + @$(COMPILE_ET) $(srcdir)/../e2fsck/prof_err.et + +profile.o: + @echo " CC $<" + @$(CC) -c $(ALL_CFLAGS) $(srcdir)/../e2fsck/profile.c -o $@ + findsuper: findsuper.o @echo " LD $@" @$(CC) $(ALL_LDFLAGS) -o findsuper findsuper.o @@ -117,10 +128,6 @@ $(STATIC_LIBS) $(STATIC_LIBE2P) $(STATIC_LIBBLKID) \ $(STATIC_LIBUUID) $(LIBINTL) -resize2fs: resize2fs.o $(DEPLIBS) - @echo " LD $@" - @$(CC) $(ALL_LDFLAGS) -o resize2fs resize2fs.o $(LIBS) $(LIBINTL) - chattr: $(CHATTR_OBJS) $(DEPLIBS_E2P) @echo " LD $@" @$(CC) $(ALL_LDFLAGS) -o chattr $(CHATTR_OBJS) $(LIBS_E2P) $(LIBINTL) @@ -288,10 +295,10 @@ echo " INSTALL_DATA $(man5dir)/$$i"; \ $(INSTALL_DATA) $$i $(DESTDIR)$(man5dir)/$$i; \ done - @if ! test -f $(DESTDIR)/etc/mke2fs.conf; then \ - echo " INSTALL_DATA /etc/mke2fs.conf"; \ + @if ! test -f $(DESTDIR)$(root_sysconfdir)/mke2fs.conf; then \ + echo " INSTALL_DATA $(root_sysconfdir)/mke2fs.conf"; \ $(INSTALL_DATA) $(srcdir)/mke2fs.conf \ - $(DESTDIR)/etc/mke2fs.conf; \ + $(DESTDIR)$(root_sysconfdir)/mke2fs.conf; \ fi install-strip: install @@ -344,7 +351,7 @@ $(RM) -f $(SPROGS) $(USPROGS) $(UPROGS) $(UMANPAGES) $(SMANPAGES) \ $(FMANPAGES) \ base_device base_device.out mke2fs.static filefrag \ - e2initrd_helper partinfo \#* *.s *.o *.a *~ core + e2initrd_helper partinfo prof_err.[ch] \#* *.s *.o *.a *~ core mostlyclean: clean distclean: clean @@ -374,7 +381,8 @@ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \ $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \ - $(srcdir)/util.h $(top_srcdir)/version.h $(srcdir)/nls-enable.h + $(srcdir)/util.h $(srcdir)/../e2fsck/profile.h $(top_srcdir)/version.h \ + $(srcdir)/nls-enable.h chattr.o: $(srcdir)/chattr.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/et/com_err.h \ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ @@ -414,3 +422,5 @@ logsave.o: $(srcdir)/logsave.c filefrag.o: $(srcdir)/filefrag.c base_device.o: $(srcdir)/base_device.c $(srcdir)/fsck.h +profile.o: $(srcdir)/../e2fsck/profile.c $(top_srcdir)/lib/et/com_err.h \ + $(srcdir)/../e2fsck/profile.h prof_err.h diff -Nru e2fsprogs-1.39/misc/mke2fs.8.in e2fsprogs-1.39-tyt1/misc/mke2fs.8.in --- e2fsprogs-1.39/misc/mke2fs.8.in 2006-05-28 21:39:03.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/mke2fs.8.in 2006-10-06 23:42:52.000000000 -0400 @@ -30,6 +30,10 @@ .I bytes-per-inode ] [ +.B \-I +.I inode-size +] +[ .B \-j ] [ @@ -191,8 +195,13 @@ .B \-F Force .B mke2fs -to run, even if the specified device is not a -block special device, or appears to be mounted. +to create a filesystem, even if the specified device is not a partition +on a block special device, or if other parameters do not make sense. +In order to force +.B mke2fs +to create a filesystem even if the filesystem appears to be in use +or is mounted (a truly dangerous thing to do), this option must be +specified twice. .TP .BI \-g " blocks-per-group" Specify the number of blocks in a block group. There is generally no @@ -218,6 +227,23 @@ inodes will be made. Be warned that is not possible to expand the number of inodes on a filesystem after it is created, so be careful deciding the correct value for this parameter. +.TP +.BI \-I " inode-size" +Specify the size of each inode in bytes. +.B mke2fs +creates 128-byte inodes by default. In kernels after 2.6.10 and some +earlier vendor kernels it is possible to utilize larger inodes to store +extended attributes for improved performance. The +.I inode-size +value must be a power of two larger or equal to 128. The larger the +.I inode-size +the more space the inode table will consume, and this reduces the usable +space in the filesystem and can also negatively impact performance. Using +the default value is always safe, though it may be desirable to use 256-byte +inodes if full backward compatibility is not a concern. Extended attributes +stored in large inodes are not visible with older kernels, and such +filesystems will not be mountable with 2.4 kernels at all. It is not +possible to change this value after the filesystem is created. .TP .B \-j Create the filesystem with an ext3 journal. If the diff -Nru e2fsprogs-1.39/misc/mke2fs.c e2fsprogs-1.39-tyt1/misc/mke2fs.c --- e2fsprogs-1.39/misc/mke2fs.c 2006-05-13 09:16:57.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/mke2fs.c 2006-10-06 23:42:54.000000000 -0400 @@ -94,11 +94,12 @@ static void usage(void) { fprintf(stderr, _("Usage: %s [-c|-t|-l filename] [-b block-size] " - "[-f fragment-size]\n\t[-i bytes-per-inode] [-j] [-J journal-options]" - " [-N number-of-inodes]\n\t[-m reserved-blocks-percentage] " - "[-o creator-os] [-g blocks-per-group]\n\t[-L volume-label] " - "[-M last-mounted-directory] [-O feature[,...]]\n\t" - "[-r fs-revision] [-R options] [-qvSV] device [blocks-count]\n"), + "[-f fragment-size]\n\t[-i bytes-per-inode] [-I inode-size] " + "[-j] [-J journal-options]\n" + "\t[-N number-of-inodes] [-m reserved-blocks-percentage] " + "[-o creator-os]\n\t[-g blocks-per-group] [-L volume-label] " + "[-M last-mounted-directory]\n\t[-O feature[,...]] " + "[-r fs-revision] [-R options] [-qvSV]\n\tdevice [blocks-count]\n"), program_name); exit(1); } @@ -188,7 +189,7 @@ errcode_t retval; char buf[1024]; - sprintf(buf, "badblocks -b %d -X %s%s%s %d", fs->blocksize, + sprintf(buf, "badblocks -b %d -X %s%s%s %u", fs->blocksize, quiet ? "" : "-s ", (cflag > 1) ? "-w " : "", fs->device_name, fs->super->s_blocks_count); if (verbose) @@ -232,7 +233,7 @@ if (ext2fs_badblocks_list_test(bb_list, i)) { fprintf(stderr, _("Block %d in primary " "superblock/group descriptor area bad.\n"), i); - fprintf(stderr, _("Blocks %u through %d must be good " + fprintf(stderr, _("Blocks %u through %u must be good " "in order to build a filesystem.\n"), fs->super->s_first_data_block, must_be_good); fputs(_("Aborting....\n"), stderr); @@ -819,12 +820,12 @@ if (!bpg) bpg = blocksize * 8; gdpb = blocksize / sizeof(struct ext2_group_desc); - group_desc_count = (param->s_blocks_count + - bpg - 1) / bpg; + group_desc_count = + ext2fs_div_ceil(param->s_blocks_count, bpg); desc_blocks = (group_desc_count + gdpb - 1) / gdpb; - rsv_groups = (resize + bpg - 1) / bpg; - rsv_gdb = (rsv_groups + gdpb - 1) / gdpb - + rsv_groups = ext2fs_div_ceil(resize, bpg); + rsv_gdb = ext2fs_div_ceil(rsv_groups, gdpb) - desc_blocks; if (rsv_gdb > (int) EXT2_ADDR_PER_BLOCK(param)) rsv_gdb = EXT2_ADDR_PER_BLOCK(param); @@ -857,7 +858,8 @@ EXT2_FEATURE_COMPAT_LAZY_BG, /* Compat */ EXT2_FEATURE_INCOMPAT_FILETYPE| /* Incompat */ EXT3_FEATURE_INCOMPAT_JOURNAL_DEV| - EXT2_FEATURE_INCOMPAT_META_BG, + EXT2_FEATURE_INCOMPAT_META_BG| + EXT3_FEATURE_INCOMPAT_EXTENTS, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER /* R/O compat */ }; @@ -870,7 +872,7 @@ exit(1); } -static const char *config_fn[] = { "/etc/mke2fs.conf", 0 }; +static const char *config_fn[] = { ROOT_SYSCONFDIR "/mke2fs.conf", 0 }; static void edit_feature(const char *str, __u32 *compat_array) { @@ -895,7 +897,7 @@ double reserved_ratio = 5.0; int sector_size = 0; int show_version_only = 0; - ext2_ino_t num_inodes = 0; + __u64 num_inodes = 0; /* u64 to catch too-large input */ errcode_t retval; char * oldpath = getenv("PATH"); char * extended_opts = 0; @@ -1076,7 +1078,6 @@ case 's': /* deprecated */ s_opt = atoi(optarg); break; -#ifdef EXT2_DYNAMIC_REV case 'I': inode_size = strtoul(optarg, &tmp, 0); if (*tmp) { @@ -1085,12 +1086,11 @@ exit(1); } break; -#endif case 'v': verbose = 1; break; case 'F': - force = 1; + force++; break; case 'L': volume_label = optarg; @@ -1261,7 +1261,7 @@ } if (!fs_type) { - int megs = fs_param.s_blocks_count * + int megs = (__u64)fs_param.s_blocks_count * (EXT2_BLOCK_SIZE(&fs_param) / 1024) / 1024; if (megs <= 3) @@ -1413,7 +1413,15 @@ "blocksizes greater than 4096\n\tusing ext3. " "Use -b 4096 if this is an issue for you.\n\n")); - if (inode_size) { + if (inode_size == 0) { + profile_get_integer(profile, "defaults", "inode_size", NULL, + 0, &inode_size); + profile_get_integer(profile, "fs_types", fs_type, + "inode_size", inode_size, + &inode_size); + } + + if (inode_size && fs_param.s_rev_level >= EXT2_DYNAMIC_REV) { if (inode_size < EXT2_GOOD_OLD_INODE_SIZE || inode_size > EXT2_BLOCK_SIZE(&fs_param) || inode_size & (inode_size - 1)) { @@ -1425,11 +1433,26 @@ } if (inode_size != EXT2_GOOD_OLD_INODE_SIZE) fprintf(stderr, _("Warning: %d-byte inodes not usable " - "on most systems\n"), + "on older systems\n"), inode_size); fs_param.s_inode_size = inode_size; } + /* Make sure number of inodes specified will fit in 32 bits */ + if (num_inodes == 0) { + __u64 n; + n = (__u64) fs_param.s_blocks_count * blocksize / inode_ratio; + if (n > ~0U) { + com_err(program_name, 0, + _("too many inodes (%llu), raise inode ratio?"), n); + exit(1); + } + } else if (num_inodes > ~0U) { + com_err(program_name, 0, + _("too many inodes (%llu), specify < 2^32 inodes"), + (__u64)num_inodes); + exit(1); + } /* * Calculate number of inodes based on the inode ratio */ @@ -1440,8 +1463,8 @@ /* * Calculate number of blocks to reserve */ - fs_param.s_r_blocks_count = (fs_param.s_blocks_count * reserved_ratio) - / 100; + fs_param.s_r_blocks_count = e2p_percent(reserved_ratio, + fs_param.s_blocks_count); } int main (int argc, char *argv[]) diff -Nru e2fsprogs-1.39/misc/mke2fs.conf.5.in e2fsprogs-1.39-tyt1/misc/mke2fs.conf.5.in --- e2fsprogs-1.39/misc/mke2fs.conf.5.in 2006-05-22 17:50:10.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/mke2fs.conf.5.in 2006-10-06 23:42:52.000000000 -0400 @@ -131,6 +131,12 @@ specify one on the command line, and the filesystem-type specific section of the configuration file does not specify a default inode ratio. +.TP +.I inode_size +This relation specifies the default inode size if the user does not +specify one on the command line, and the filesystem-type +specific section of the configuration file does not specify a default +inode size. .SH THE [fs_types] STANZA Each tag in the .I [fs_types] @@ -181,6 +187,10 @@ .I inode_ratio This relation specifies the default inode ratio if the user does not specify one on the command line. +.TP +.I inode_size +This relation specifies the default inode size if the user does not +specify one on the command line. .SH FILES .TP .I /etc/mke2fs.conf diff -Nru e2fsprogs-1.39/misc/tune2fs.8.in e2fsprogs-1.39-tyt1/misc/tune2fs.8.in --- e2fsprogs-1.39/misc/tune2fs.8.in 2006-05-14 18:07:44.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/tune2fs.8.in 2006-10-06 23:42:52.000000000 -0400 @@ -182,8 +182,8 @@ (time-dependent) checking be enabled to force periodic full .BR e2fsck (8) checking of the filesystem. Failure to do so may lead to filesystem -corruption due to bad disks, cables, memory, or kernel bugs to go -unnoticed until they cause data loss or corruption. +corruption (due to bad disks, cables, memory, or kernel bugs) going +unnoticed, ultimately resulting in data loss or corruption. .TP .B \-j Add an ext3 journal to the filesystem. If the @@ -329,7 +329,7 @@ is the default, where newly created files take on the fsgid of the current process, unless the directory has the setgid bit set, in which case it takes the gid from the parent directory, and also gets the setgid bit set if it is -directory itself. +a directory itself. .TP .B user_xattr Enable user-specified extended attributes. @@ -436,7 +436,7 @@ of .I time-last-checked is the international date format, with an optional time specifier, i.e. -YYYYMMDD[[HHMM]SS]. The keyword +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. diff -Nru e2fsprogs-1.39/misc/tune2fs.c e2fsprogs-1.39-tyt1/misc/tune2fs.c --- e2fsprogs-1.39/misc/tune2fs.c 2006-05-14 17:21:25.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/tune2fs.c 2006-10-06 23:42:54.000000000 -0400 @@ -97,7 +97,8 @@ static __u32 ok_features[3] = { EXT3_FEATURE_COMPAT_HAS_JOURNAL | EXT2_FEATURE_COMPAT_DIR_INDEX, /* Compat */ - EXT2_FEATURE_INCOMPAT_FILETYPE, /* Incompat */ + EXT2_FEATURE_INCOMPAT_FILETYPE| /* Incompat */ + EXT3_FEATURE_INCOMPAT_EXTENTS, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER /* R/O compat */ }; @@ -823,7 +824,8 @@ printf (_("Setting interval between checks to %lu seconds\n"), interval); } if (m_flag) { - sb->s_r_blocks_count = sb->s_blocks_count * reserved_ratio /100; + sb->s_r_blocks_count = e2p_percent(reserved_ratio, + sb->s_blocks_count); ext2fs_mark_super_dirty(fs); printf (_("Setting reserved blocks percentage to %g%% (%u blocks)\n"), reserved_ratio, sb->s_r_blocks_count); diff -Nru e2fsprogs-1.39/misc/util.c e2fsprogs-1.39-tyt1/misc/util.c --- e2fsprogs-1.39/misc/util.c 2006-03-23 07:38:10.000000000 -0500 +++ e2fsprogs-1.39-tyt1/misc/util.c 2006-10-06 23:42:52.000000000 -0400 @@ -154,7 +154,7 @@ } if (mount_flags & EXT2_MF_MOUNTED) { fprintf(stderr, _("%s is mounted; "), device); - if (force) { + if (force > 2) { fputs(_("mke2fs forced anyway. Hope /etc/mtab is " "incorrect.\n"), stderr); return; @@ -166,7 +166,7 @@ if (mount_flags & EXT2_MF_BUSY) { fprintf(stderr, _("%s is apparently in use by the system; "), device); - if (force) { + if (force > 2) { fputs(_("mke2fs forced anyway.\n"), stderr); return; } @@ -275,7 +275,7 @@ } if (fs->super->s_blocks_count < 32768) - j_blocks = 1024; + j_blocks = 1400; else if (fs->super->s_blocks_count < 256*1024) j_blocks = 4096; else if (fs->super->s_blocks_count < 512*1024) diff -Nru e2fsprogs-1.39/misc/uuidgen.1.in e2fsprogs-1.39-tyt1/misc/uuidgen.1.in --- e2fsprogs-1.39/misc/uuidgen.1.in 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/uuidgen.1.in 2006-10-06 23:42:52.000000000 -0400 @@ -34,6 +34,10 @@ generator is present. Otherwise, it will chose a time-based UUID. It is possible to force the generation of one of these two UUID types by using the +.PP +A UUID of the form 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb (in +.BR printf (3) +format "%08x-%04x-%04x-%04x-%012x") is output to the standard output. .B \-r or .B \-t @@ -49,10 +53,6 @@ .B \-t Generate a time-based UUID. This method creates a UUID based on the system clock plus the system's ethernet hardware address, if present. -.SH RETURN VALUE -The UUID of the form 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb (in -.BR printf (3) -format "%08x-%04x-%04x-%04x-%012x") is output to the standard output. .SH "CONFORMING TO" OSF DCE 1.1 .SH AUTHOR diff -Nru e2fsprogs-1.39/misc/uuidgen.c e2fsprogs-1.39-tyt1/misc/uuidgen.c --- e2fsprogs-1.39/misc/uuidgen.c 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/misc/uuidgen.c 2006-10-06 23:42:52.000000000 -0400 @@ -16,6 +16,7 @@ #ifdef HAVE_GETOPT_H #include #else +extern int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind; #endif diff -Nru e2fsprogs-1.39/po/ChangeLog e2fsprogs-1.39-tyt1/po/ChangeLog --- e2fsprogs-1.39/po/ChangeLog 2006-04-09 18:32:44.000000000 -0400 +++ e2fsprogs-1.39-tyt1/po/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,11 @@ +2006-09-13 Theodore Tso + + * Update French and Dutch translations + +2006-08-19 Theodore Tso + + * LI?NGUAS, vi.po, vi.gmo: Add Vietnamese translation + 2006-04-09 Theodore Ts'o * Update French, Dutch, Polish, Swedish, and Turkish translations. Binary files e2fsprogs-1.39/po/fr.gmo and e2fsprogs-1.39-tyt1/po/fr.gmo differ diff -Nru e2fsprogs-1.39/po/fr.po e2fsprogs-1.39-tyt1/po/fr.po --- e2fsprogs-1.39/po/fr.po 2006-04-09 18:30:58.000000000 -0400 +++ e2fsprogs-1.39-tyt1/po/fr.po 2006-10-06 23:42:52.000000000 -0400 @@ -62,7 +62,7 @@ #. msgid "" msgstr "" -"Project-Id-Version: GNU e2fsprogs 1.38-b3\n" +"Project-Id-Version: GNU e2fsprogs 1.39-b2\n" "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n" "POT-Creation-Date: 2006-03-29 15:30-0500\n" "PO-Revision-Date: 2006-04-07 01:45+0200\n" @@ -102,8 +102,7 @@ #: e2fsck/badblocks.c:93 misc/mke2fs.c:177 msgid "while reading in list of bad blocks from file" -msgstr "" -"lors de la lecture de la liste des blocs dfectueux partir du fichier" +msgstr "lors de la lecture de la liste des blocs dfectueux partir du fichier" #: e2fsck/badblocks.c:103 msgid "while updating bad block inode" @@ -180,8 +179,7 @@ #: e2fsck/flushb.c:63 #, c-format msgid "BLKFLSBUF ioctl not supported! Can't flush buffers.\n" -msgstr "" -"L'ioctl BLKFLSBUF n'est pas support! Impossible de vider les tampons.\n" +msgstr "L'ioctl BLKFLSBUF n'est pas support! Impossible de vider les tampons.\n" #: e2fsck/iscan.c:46 #, c-format @@ -506,7 +504,7 @@ #: e2fsck/problem.c:51 msgid "Fix" -msgstr "Rparer" +msgstr "Corriger" #: e2fsck/problem.c:52 msgid "Clear" @@ -586,7 +584,7 @@ #: e2fsck/problem.c:79 msgid "FIXED" -msgstr "RPAR" +msgstr "CORRIG" #: e2fsck/problem.c:80 msgid "CLEARED" @@ -825,8 +823,7 @@ #: e2fsck/problem.c:212 msgid "" "Ext3 @j @S is unknown type %N (unsupported).\n" -"It is likely that your copy of e2fsck is old and/or doesn't support this @j " -"format.\n" +"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n" "It is also possible the @j @S is corrupt.\n" msgstr "" "Le @S du @j Ext3 est de type inconnu%N (non support).\n" @@ -843,20 +840,17 @@ #: e2fsck/problem.c:225 #, c-format msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n" -msgstr "" -"Le @S ne semble pas avoir le drapeau has_journal, mais a un %s de @j ext3.\n" +msgstr "Le @S ne semble pas avoir le drapeau has_journal, mais a un %s de @j ext3.\n" #. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n #: e2fsck/problem.c:230 msgid "@S has ext3 needs_recovery flag set, but no @j.\n" -msgstr "" -"Le @S a le drapeau ext3 needs_recovery activ, mais n'a pas de de @j.\n" +msgstr "Le @S a le drapeau ext3 needs_recovery activ, mais n'a pas de de @j.\n" #. @-expanded: ext3 recovery flag is clear, but journal has data.\n #: e2fsck/problem.c:235 msgid "ext3 recovery flag is clear, but @j has data.\n" -msgstr "" -"le drapeau ext3 recovery n'est pas activ, mais le @j contient des donnes.\n" +msgstr "le drapeau ext3 recovery n'est pas activ, mais le @j contient des donnes.\n" #. @-expanded: Clear journal #: e2fsck/problem.c:240 @@ -871,9 +865,7 @@ #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n #: e2fsck/problem.c:250 msgid "Recovery flag not set in backup @S, so running @j anyway.\n" -msgstr "" -"Le drapeau recovery n'est pas activ dans le @S de secours, le @j sera donc " -"quand mme excut.\n" +msgstr "Le drapeau recovery n'est pas activ dans le @S de secours, le @j sera donc quand mme excut.\n" #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n #: e2fsck/problem.c:255 @@ -905,22 +897,17 @@ #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem. #: e2fsck/problem.c:280 e2fsck/problem.c:608 msgid "@f has feature flag(s) set, but is a revision 0 @f. " -msgstr "" -"le @f a des drapeaux de fonctionnalits activs mais est un @f de version 0. " +msgstr "le @f a des drapeaux de fonctionnalits activs mais est un @f de version 0. " #. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n #: e2fsck/problem.c:285 msgid "Ext3 @j @S has an unknown read-only feature flag set.\n" -msgstr "" -"Le @S du @j Ext3 a un drapeau de fonctionnalits inconnu slectionn en " -"lecture seule.\n" +msgstr "Le @S du @j Ext3 a un drapeau de fonctionnalits inconnu slectionn en lecture seule.\n" #. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n #: e2fsck/problem.c:290 msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n" -msgstr "" -"Le @S du @j Ext3 contient un drapeau non reconnu de fonctionnalits " -"incompatibles.\n" +msgstr "Le @S du @j Ext3 contient un drapeau non reconnu de fonctionnalits incompatibles.\n" #. @-expanded: journal version not supported by this e2fsck.\n #: e2fsck/problem.c:295 @@ -985,9 +972,7 @@ #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero. #: e2fsck/problem.c:327 msgid "Resize_@i not enabled, but the resize @i is non-zero. " -msgstr "" -"Resize_inode n'est pas activ, mais l'@i de changement de taille n'est pas " -"nul. " +msgstr "Resize_inode n'est pas activ, mais l'@i de changement de taille n'est pas nul. " #. @-expanded: Resize inode not valid. #: e2fsck/problem.c:332 @@ -1023,7 +1008,7 @@ #. @-expanded: root inode has dtime set (probably due to old mke2fs). #: e2fsck/problem.c:362 msgid "@r has dtime set (probably due to old mke2fs). " -msgstr "@r a un dtime initialis (probablement en raison d'un vieux mke2fs). " +msgstr "l'@r a un dtime (probablement en raison d'un vieux mke2fs). " #. @-expanded: Reserved inode %i (%Q) has invalid mode. #: e2fsck/problem.c:367 @@ -1040,7 +1025,7 @@ #: e2fsck/problem.c:377 #, c-format msgid "@i %i is in use, but has dtime set. " -msgstr "l'@i %i est utilis, mais a un dtime initialis. " +msgstr "l'@i %i est utilis, mais a un dtime. " #. @-expanded: inode %i is a zero-length directory. #: e2fsck/problem.c:382 @@ -1123,8 +1108,7 @@ #. @-expanded: Bad block %b used as bad block inode indirect block. #: e2fsck/problem.c:457 msgid "Bad @b %b used as bad @b @i indirect @b. " -msgstr "" -"%b dfectueux utilis en tant que @b indirect d'@i des @bs dfectueux. " +msgstr "%b dfectueux utilis en tant que @b indirect d'@i des @bs dfectueux. " #. @-expanded: \n #. @-expanded: The bad block inode has probably been corrupted. You probably\n @@ -1173,9 +1157,7 @@ #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n #: e2fsck/problem.c:485 msgid "Block %b in the primary @g descriptors is on the bad @b list\n" -msgstr "" -"Le bloc %b dans les descripteurs de @gs primaires est dans la liste des @bs " -"dfectueux\n" +msgstr "Le bloc %b dans les descripteurs de @gs primaires est dans la liste des @bs dfectueux\n" #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n #: e2fsck/problem.c:491 @@ -1185,16 +1167,12 @@ #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n #: e2fsck/problem.c:496 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n" -msgstr "" -"Avertissement: la copie des descripteurs de @gs du @g %g a un @b (%b) " -"dfectueux.\n" +msgstr "Avertissement: la copie des descripteurs de @gs du @g %g a un @b (%b) dfectueux.\n" #. @-expanded: Programming error? block #%b claimed for no reason in process_bad_block.\n #: e2fsck/problem.c:502 msgid "Programming error? @b #%b claimed for no reason in process_bad_@b.\n" -msgstr "" -"Erreur de programmation? @b n%b reclam sans aucune raison dans " -"process_bad_block.\n" +msgstr "Erreur de programmation? @b n%b reclam sans aucune raison dans process_bad_block.\n" #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n #: e2fsck/problem.c:508 @@ -1265,16 +1243,12 @@ #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n #: e2fsck/problem.c:568 msgid "Error storing @i count information (@i=%i, count=%N): %m\n" -msgstr "" -"Erreur lors du stockage du compteur d'information d'@i (@i=%i, " -"compteur=%N): %m\n" +msgstr "Erreur lors du stockage du compteur d'information d'@i (@i=%i, compteur=%N): %m\n" #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n #: e2fsck/problem.c:573 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n" -msgstr "" -"Erreur lors du stockage de l'information du @b de @ds (@i=%i, @b=%b, " -"num=%N): %m\n" +msgstr "Erreur lors du stockage de l'information du @b de @ds (@i=%i, @b=%b, num=%N): %m\n" #. @-expanded: Error reading inode %i: %m\n #: e2fsck/problem.c:579 @@ -1303,9 +1277,7 @@ #: e2fsck/problem.c:598 #, c-format msgid "@i %i has @cion flag set on @f without @cion support. " -msgstr "" -"l'@i %i a le drapeau de @cion qui est initialis sur un @f sans support de " -"@cion. " +msgstr "l'@i %i a le drapeau de @cion qui est initialis sur un @f sans support de @cion. " #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size. #: e2fsck/problem.c:603 @@ -1332,9 +1304,7 @@ #. @-expanded: inodes that were part of a corrupted orphan linked list found. #: e2fsck/problem.c:629 msgid "@is that were part of a corrupted orphan linked list found. " -msgstr "" -"des @is qui faisaient partie d'un liste chane d'orphelins corrompue ont " -"t reprs. " +msgstr "des @is qui faisaient partie d'une liste chane d'orphelins corrompue ont t reprs. " #. @-expanded: error allocating refcount structure (%N): %m\n #: e2fsck/problem.c:634 @@ -1416,8 +1386,7 @@ #: e2fsck/problem.c:708 #, c-format msgid "@i %i has INDEX_FL flag set on @f without htree support.\n" -msgstr "" -"l'@i %i a le drapeau INDEX_FL activ sur le @f sans support des htrees.\n" +msgstr "l'@i %i a le drapeau INDEX_FL activ sur le @f sans support des htrees.\n" #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n #: e2fsck/problem.c:713 @@ -1453,9 +1422,7 @@ msgid "" "Bad @b @i has an indirect @b (%b) that conflicts with\n" "@f metadata. " -msgstr "" -"l'@i des @bs dfectueux a un @b indirect (%b) qui entre en conflit avec les " -"mtadonnes du @f. " +msgstr "l'@i des @bs dfectueux a un @b indirect (%b) qui entre en conflit avec les mtadonnes du @f. " #. @-expanded: Resize inode (re)creation failed: %m. #: e2fsck/problem.c:744 @@ -1503,8 +1470,7 @@ "Pass 1B: Rescanning for @m @bs\n" msgstr "" "\n" -"Excution de passes additionnelles pour rsoudre les problmes de @bs " -"rclams par plus d'un @i...\n" +"Excution de passes additionnelles pour rsoudre les problmes de @bs rclams par plus d'un @i...\n" "Passe1B: r-examen pour les @bs @m\n" #. @-expanded: multiply-claimed block(s) in inode %i: @@ -1797,7 +1763,7 @@ #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n #: e2fsck/problem.c:1069 msgid "Setting filetype for @E to %N.\n" -msgstr "Dfinition du type de fichiers pour l'@E %N.\n" +msgstr "Dfinition du type de fichier pour l'@E %N.\n" #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n #: e2fsck/problem.c:1074 @@ -1827,9 +1793,7 @@ #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n #: e2fsck/problem.c:1099 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n" -msgstr "" -"le @f contient de grands fichiers, mais n'a pas le drapeau LARGE_FILE activ " -"dans le @S.\n" +msgstr "le @f contient de grands fichiers, mais n'a pas le drapeau LARGE_FILE activ dans le @S.\n" #. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n #: e2fsck/problem.c:1104 @@ -1985,17 +1949,13 @@ #: e2fsck/problem.c:1240 #, c-format msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n" -msgstr "" -"ext2fs_new_dir_@b: %m lors de la tentative de cration d'un nouveau @b de " -"@d\n" +msgstr "ext2fs_new_dir_@b: %m lors de la tentative de cration d'un nouveau @b de @d\n" #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n #: e2fsck/problem.c:1245 #, c-format msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n" -msgstr "" -"ext2fs_write_dir_@b: %m lors de la tentative d'criture du @b de @d pour /" -"@l\n" +msgstr "ext2fs_write_dir_@b: %m lors de la tentative d'criture du @b de @d pour /@l\n" #. @-expanded: Error while adjusting inode count on inode %i\n #: e2fsck/problem.c:1250 @@ -2133,14 +2093,12 @@ #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n #: e2fsck/problem.c:1418 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n" -msgstr "" -"Le dcompte des @is libres est erron pour le @g n%g (%i, dcompt=%j).\n" +msgstr "Le dcompte des @is libres est erron pour le @g n%g (%i, dcompt=%j).\n" #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n #: e2fsck/problem.c:1423 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n" -msgstr "" -"Le dcompte des rpertoires est erron pour le @g n%g (%i, dcompt=%j).\n" +msgstr "Le dcompte des rpertoires est erron pour le @g n%g (%i, dcompt=%j).\n" #. @-expanded: Free inodes count wrong (%i, counted=%j).\n #: e2fsck/problem.c:1428 @@ -2150,8 +2108,7 @@ #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n #: e2fsck/problem.c:1433 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n" -msgstr "" -"Le dcompte des @bs libres est erron pour le @g n%g (%b, dcompt=%c).\n" +msgstr "Le dcompte des @bs libres est erron pour le @g n%g (%b, dcompt=%c).\n" #. @-expanded: Free blocks count wrong (%b, counted=%c).\n #: e2fsck/problem.c:1438 @@ -2161,13 +2118,8 @@ #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap #. @-expanded: endpoints (%i, %j)\n #: e2fsck/problem.c:1443 -msgid "" -"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B " -"endpoints (%i, %j)\n" -msgstr "" -"ERREUR DE PROGRAMMATION: les points de terminaisons (%b, %c) de @Bs " -"du @f (n%N) ne concordent pas avec les points de terminaison de @Bs " -"calculs (%i, %j)\n" +msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n" +msgstr "ERREUR DE PROGRAMMATION: les points de terminaisons (%b, %c) de @Bs du @f (n%N) ne concordent pas avec les points de terminaison de @Bs calculs (%i, %j)\n" #: e2fsck/problem.c:1449 msgid "Internal error: fudging end of bitmap (%N)\n" @@ -2255,8 +2207,7 @@ #: e2fsck/swapfs.c:223 #, c-format msgid "Pass 0: Doing byte-swap of filesystem\n" -msgstr "" -"Passe 0: traitement de l'change octet par octet du systme de fichiers\n" +msgstr "Passe 0: traitement de l'change octet par octet du systme de fichiers\n" #: e2fsck/swapfs.c:230 #, c-format @@ -2293,8 +2244,7 @@ " -p Automatic repair (no questions)\n" " -n Make no changes to the filesystem\n" " -y Assume \"yes\" to all questions\n" -" -c Check for bad blocks and add them to the badblock " -"list\n" +" -c Check for bad blocks and add them to the badblock list\n" " -f Force checking even if filesystem is marked clean\n" msgstr "" "\n" @@ -2335,7 +2285,7 @@ #: e2fsck/unix.c:133 #, c-format msgid " # of inodes with ind/dind/tind blocks: %d/%d/%d\n" -msgstr " n d'i-noeuds avec des blocs ind/dind/tind: %d/%d/%d\n" +msgstr " nombre d'i-noeuds avec des blocs ind/dind/tind: %d/%d/%d\n" #: e2fsck/unix.c:177 misc/badblocks.c:779 misc/tune2fs.c:792 misc/util.c:151 #: resize/main.c:184 @@ -2483,9 +2433,7 @@ #: e2fsck/unix.c:782 #, c-format msgid "Incompatible options not allowed when byte-swapping.\n" -msgstr "" -"Les options incompatibles ne sont pas autorises lors de l'changes " -"d'octets.\n" +msgstr "Les options incompatibles ne sont pas autorises lors de l'changes d'octets.\n" #: e2fsck/unix.c:789 #, c-format @@ -2577,9 +2525,7 @@ #: e2fsck/unix.c:1021 #, c-format -msgid "" -"Warning: skipping journal recovery because doing a read-only filesystem " -"check.\n" +msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n" msgstr "" "Avertissement: saute la rcupration du journal puisque l'on\n" "procde l'examen d'un systme de fichiers en lecture seule.\n" @@ -2805,8 +2751,7 @@ #, c-format msgid "" "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n" -" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern " -"[...]]]\n" +" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n" " device [last_block [start_block]]\n" msgstr "" "Usage: %s [-b taille_de_bloc] [-i fichier_d_entre]\n" @@ -2877,8 +2822,7 @@ #: misc/badblocks.c:597 msgid "Checking for bad blocks (non-destructive read-write test)\n" -msgstr "" -"Vrification des blocs dfectueux (test non destructif de lecture-criture)\n" +msgstr "Vrification des blocs dfectueux (test non destructif de lecture-criture)\n" #: misc/badblocks.c:604 msgid "" @@ -3035,8 +2979,7 @@ #: misc/dumpe2fs.c:53 #, c-format msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n" -msgstr "" -"Usage: %s [-bfhixV] [-ob super_bloc] [-oB taille_de_bloc] priphrique\n" +msgstr "Usage: %s [-bfhixV] [-ob super_bloc] [-oB taille_de_bloc] priphrique\n" #: misc/dumpe2fs.c:131 #, c-format @@ -3193,8 +3136,7 @@ #: misc/e2image.c:81 #, c-format msgid "short write (only %d bytes) for writing image header" -msgstr "" -"criture courte (seulement %d octets) pour l'criture de l'en-tte image" +msgstr "criture courte (seulement %d octets) pour l'criture de l'en-tte image" #: misc/e2image.c:100 msgid "while writing superblock" @@ -3288,9 +3230,7 @@ #: misc/fsck.c:607 #, c-format msgid "Warning... %s for device %s exited with signal %d.\n" -msgstr "" -"Avertissement... %s pour le priphrique %s s'est termin avec le signal %" -"d.\n" +msgstr "Avertissement... %s pour le priphrique %s s'est termin avec le signal %d.\n" #: misc/fsck.c:613 #, c-format @@ -3317,8 +3257,7 @@ #: misc/fsck.c:749 msgid "Couldn't allocate memory for filesystem types\n" -msgstr "" -"Impossible d'allouer de la mmoire pour les types de systmes de fichiers\n" +msgstr "Impossible d'allouer de la mmoire pour les types de systmes de fichiers\n" #: misc/fsck.c:889 #, c-format @@ -3335,11 +3274,8 @@ msgstr "--en attente-- (passe %d)\n" #: misc/fsck.c:1051 -msgid "" -"Usage: fsck [-ANPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n" -msgstr "" -"Usage: fsck [-ANPRTV] [ -C [fd] ] [-t type_sys_fichiers] " -"[options_sys_fichiers] [sys_fichiers...]\n" +msgid "Usage: fsck [-ANPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n" +msgstr "Usage: fsck [-ANPRTV] [ -C [fd] ] [-t type_sys_fichiers] [options_sys_fichiers] [sys_fichiers...]\n" #: misc/fsck.c:1093 #, c-format @@ -3396,22 +3332,17 @@ #: misc/mke2fs.c:206 msgid "while processing list of bad blocks from program" -msgstr "" -"lors du traitement de la liste des blocs dfectueux partir du programme" +msgstr "lors du traitement de la liste des blocs dfectueux partir du programme" #: misc/mke2fs.c:233 #, c-format msgid "Block %d in primary superblock/group descriptor area bad.\n" -msgstr "" -"Bloc %d dans la zone du descripteur de superbloc/groupe primaire est " -"dfectueux.\n" +msgstr "Bloc %d dans la zone du descripteur de superbloc/groupe primaire est dfectueux.\n" #: misc/mke2fs.c:235 #, c-format msgid "Blocks %u through %d must be good in order to build a filesystem.\n" -msgstr "" -"Blocs de %u %d doivent tre en bon tat pour gnrer le systme de " -"fichiers.\n" +msgstr "Blocs de %u %d doivent tre en bon tat pour gnrer le systme de fichiers.\n" #: misc/mke2fs.c:238 msgid "Aborting....\n" @@ -3726,8 +3657,7 @@ #: misc/mke2fs.c:1147 #, c-format -msgid "" -"Warning: %d-byte blocks too big for system (max %d), forced to continue\n" +msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n" msgstr "" "Avertissement: blocs de %d octets trop gros pour le systme (max %d),\n" "poursuite force\n" @@ -3738,8 +3668,7 @@ #: misc/mke2fs.c:1188 resize/main.c:279 msgid "while trying to determine filesystem size" -msgstr "" -"lors de la tentative de dtermination de la taille du systme de fichiers" +msgstr "lors de la tentative de dtermination de la taille du systme de fichiers" #: misc/mke2fs.c:1194 msgid "" @@ -3775,8 +3704,7 @@ #: misc/mke2fs.c:1297 msgid "while trying to determine hardware sector size" -msgstr "" -"lors de la tentative de dtermination de la taille matrielle de secteur" +msgstr "lors de la tentative de dtermination de la taille matrielle de secteur" #: misc/mke2fs.c:1349 msgid "reserved online resize blocks not supported on non-sparse filesystem" @@ -4410,8 +4338,7 @@ #: resize/resize2fs.c:1528 #, c-format msgid "Should never happen: resize inode corrupt!\n" -msgstr "" -"Ne devrait jamais se produire: i-noeud de redimensionnement corrompu!\n" +msgstr "Ne devrait jamais se produire: i-noeud de redimensionnement corrompu!\n" #~ msgid "" #~ "%s is mounted; can't resize a mounted filesystem!\n" @@ -4442,10 +4369,8 @@ #~ "\tea_ver=\n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.11.2\n" +"X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: e2fsck/badblocks.c:22 misc/mke2fs.c:154 @@ -99,7 +99,7 @@ #: e2fsck/badblocks.c:82 #, c-format msgid "while trying popen '%s'" -msgstr "tijdens een 'popen()' van %s" +msgstr "tijdens een popen() van %s" #: e2fsck/badblocks.c:93 misc/mke2fs.c:177 msgid "while reading in list of bad blocks from file" @@ -130,7 +130,7 @@ #: e2fsck/ehandler.c:60 msgid "Force rewrite" -msgstr "Herschrijven forceren" +msgstr "Herschrijven afdwingen" #: e2fsck/ehandler.c:100 #, c-format @@ -178,7 +178,7 @@ #: e2fsck/flushb.c:63 #, c-format msgid "BLKFLSBUF ioctl not supported! Can't flush buffers.\n" -msgstr "BLKFLSBUF-ioctl wordt niet ondersteund! Kan buffers niet leegmaken.\n" +msgstr "ioctl(BLKFLSBUF) wordt niet ondersteund! Kan buffers niet leegmaken.\n" #: e2fsck/iscan.c:46 #, c-format @@ -247,7 +247,7 @@ #: e2fsck/message.c:110 msgid "bblock" -msgstr "bblok" +msgstr "b" #: e2fsck/message.c:111 msgid "Bbitmap" @@ -259,11 +259,11 @@ #: e2fsck/message.c:113 msgid "Cconflicts with some other fs @b" -msgstr "c" +msgstr "C" #: e2fsck/message.c:114 msgid "iinode" -msgstr "iinode" +msgstr "i" #: e2fsck/message.c:115 msgid "Iillegal" @@ -404,7 +404,7 @@ #: e2fsck/pass1b.c:738 msgid "returned from clone_file_block" -msgstr "teruggekeerd van clone_file_block" +msgstr "### teruggekeerd van clone_file_block()" #: e2fsck/pass1.c:430 msgid "in-use inode map" @@ -428,7 +428,7 @@ #: e2fsck/pass1.c:917 msgid "Pass 1" -msgstr "Doorloop 1" +msgstr "Stap 1" #: e2fsck/pass1.c:976 #, c-format @@ -469,7 +469,7 @@ #: e2fsck/pass2.c:287 msgid "Pass 2" -msgstr "Doorloop 2" +msgstr "Stap 2" #: e2fsck/pass3.c:79 msgid "inode done bitmap" @@ -481,7 +481,7 @@ #: e2fsck/pass3.c:143 msgid "Pass 3" -msgstr "Doorloop 3" +msgstr "Stap 3" #: e2fsck/pass3.c:334 msgid "inode loop detection bitmap" @@ -489,11 +489,11 @@ #: e2fsck/pass4.c:174 msgid "Pass 4" -msgstr "Doorloop 4" +msgstr "Stap 4" #: e2fsck/pass5.c:70 msgid "Pass 5" -msgstr "Doorloop 5" +msgstr "Stap 5" #: e2fsck/problem.c:50 msgid "(no prompt)" @@ -673,7 +673,7 @@ "WARNING: SEVERE DATA LOSS POSSIBLE.\n" msgstr "" "inodetabel voor groep %g zit niet in groep (blok %b)\n" -"WAARSCHUWING: GROOT VERLIES VAN GEGEVENS IS MOGELIJK.\n" +"WAARSCHUWING: ERNSTIG VERLIES VAN GEGEVENS IS MOGELIJK.\n" #. @-expanded: \n #. @-expanded: The superblock could not be read or does not describe a correct ext2\n @@ -697,7 +697,7 @@ "Het superblok is onleesbaar of omschrijft geen geldig ext2-bestandssysteem.\n" "Als het apparaat juist is en werkelijk een ext2-bestandssysteem bevat\n" "(en niet swap of UFS of iets anders), dan is het superblok beschadigd.\n" -"U kunt proberen een ander superblok te gebruiken:\n" +"U kunt dan proberen een ander superblok te gebruiken:\n" " e2fsck -b %S \n" "\n" @@ -735,7 +735,7 @@ #. @-expanded: superblock first_data_block = %b, should have been %c\n #: e2fsck/problem.c:149 msgid "@S first_data_@b = %b, should have been %c\n" -msgstr "Superblok: eerste_gegevens_block = %b, zou %c moeten zijn.\n" +msgstr "Superblok: eerste_gegevens_blok = %b, zou %c moeten zijn.\n" #. @-expanded: filesystem did not have a UUID; generating one.\n #. @-expanded: \n @@ -758,16 +758,16 @@ "\n" msgstr "" "Opmerking: als meerdere blokken van inode-bitkaarten of blok-bitkaarten\n" -"herplaatst moeten worden, of een deel van de indotabel, zou u misschien\n" +"herplaatst moeten worden, of een deel van de inodetabel, zou u misschien\n" "eerst 'e2fsck' kunnen draaien met de optie '-b %S'. Misschien doet het\n" -"probleem zich alleen voor in het eerste superblok, een reservekopie is\n" +"probleem zich alleen voor in het eerste superblok; een reservekopie is\n" "mogelijk nog in orde.\n" "\n" #. @-expanded: Corruption found in superblock. (%s = %N).\n #: e2fsck/problem.c:168 msgid "Corruption found in @S. (%s = %N).\n" -msgstr "Beschadiging gevonden in het superblok. (%s = %N).\n" +msgstr "Beschadiging gevonden in het superblok: %s = %N.\n" #. @-expanded: Error determining size of the physical device: %m\n #: e2fsck/problem.c:173 @@ -835,7 +835,7 @@ #: e2fsck/problem.c:225 #, c-format msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n" -msgstr "Superblok heeft geen journalvlag, maar heeft wel een ext3-journal %s.\n" +msgstr "Superblok heeft geen journalvlag gezet, maar heeft wel een ext3-journal %s.\n" #. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n #: e2fsck/problem.c:230 @@ -861,13 +861,13 @@ #: e2fsck/problem.c:250 msgid "Recovery flag not set in backup @S, so running @j anyway.\n" msgstr "" -"Een reservekopie van het superblok kent geen reddingsvlag,\n" +"Reservekopieën van het superblok kennen geen reddingsvlag;\n" "het niet-lege journal wordt daarom afgespeeld.\n" #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n #: e2fsck/problem.c:255 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n" -msgstr "%s verweesde inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n" +msgstr "%s van verweesde inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n" #. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n #: e2fsck/problem.c:260 @@ -953,7 +953,7 @@ "Backing up @j @i @b information.\n" "\n" msgstr "" -"Bezig met reservekopie maken van informatie in journal-inodeblokken.\n" +"Maken van reservekopie van informatie in journal-inodeblokken...\n" "\n" #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n @@ -979,12 +979,12 @@ #. @-expanded: superblock last mount time is in the future. #: e2fsck/problem.c:337 msgid "@S last mount time is in the future. " -msgstr "Laatste aankoppelingstijd is volgens het superblok in de toekomst. " +msgstr "Laatste aankoppelingstijd ligt volgens het superblok in de toekomst. " #. @-expanded: superblock last write time is in the future. #: e2fsck/problem.c:342 msgid "@S last write time is in the future. " -msgstr "Laatste schrijftijd is volgens het superblok in de toekomst. " +msgstr "Laatste schrijftijd ligt volgens het superblok in de toekomst. " #. @-expanded: superblock hint for external superblock should be %X. #: e2fsck/problem.c:346 @@ -995,7 +995,7 @@ #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n #: e2fsck/problem.c:353 msgid "Pass 1: Checking @is, @bs, and sizes\n" -msgstr "Doorloop 1: Controle van inodes, blokken, en groottes\n" +msgstr "Stap 1: Controle van inodes, blokken, en groottes\n" #. @-expanded: root inode is not a directory. #: e2fsck/problem.c:357 @@ -1058,12 +1058,12 @@ #. @-expanded: inode %i, i_size is %Is, should be %N. #: e2fsck/problem.c:412 msgid "@i %i, i_size is %Is, @s %N. " -msgstr "Inode %i, i_size is %Is, zou %N moeten zijn. " +msgstr "Inode %i, 'i_size' is %Is, zou %N moeten zijn. " #. @-expanded: inode %i, i_blocks is %Ib, should be %N. #: e2fsck/problem.c:417 msgid "@i %i, i_@bs is %Ib, @s %N. " -msgstr "Inode %i, i_blocks is %Ib, zou %N moeten zijn. " +msgstr "Inode %i, 'i_blocks' is %Ib, zou %N moeten zijn. " #. @-expanded: illegal block #%B (%b) in inode %i. #: e2fsck/problem.c:422 @@ -1079,7 +1079,7 @@ #: e2fsck/problem.c:432 #, c-format msgid "@i %i has illegal @b(s). " -msgstr "Inode %i heeft ongeldig blok of blokken. " +msgstr "Inode %i bevat ongeldig(e) blok(ken). " #. @-expanded: Too many illegal blocks in inode %i.\n #: e2fsck/problem.c:437 @@ -1095,7 +1095,7 @@ #. @-expanded: Bad block inode has illegal block(s). #: e2fsck/problem.c:447 msgid "Bad @b @i has illegal @b(s). " -msgstr "Slechte-blokken-inode heeft ongeldig blok of blokken. " +msgstr "Slechte-blokken-inode bevat ongeldig(e) blok(ken). " #. @-expanded: Duplicate or bad block in use!\n #: e2fsck/problem.c:452 @@ -1143,7 +1143,7 @@ "\n" msgstr "" "U kunt dit blok uit de lijst van slechte blokken wissen en hopen\n" -"dat het blok toch wel goed is. Maar er wordt niets gegarandeerd.\n" +"dat het blok toch goed is. Maar er zijn geen garanties.\n" "\n" #. @-expanded: The primary superblock (%b) is on the bad block list.\n @@ -1164,12 +1164,12 @@ #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n #: e2fsck/problem.c:496 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n" -msgstr "Waarschuwing: groep %g heeft een slecht blok (%b) in de groepsbeschrijvers.\n" +msgstr "Waarschuwing: groep %g bevat een slecht blok (%b) in de groepsbeschrijvers.\n" #. @-expanded: Programming error? block #%b claimed for no reason in process_bad_block.\n #: e2fsck/problem.c:502 msgid "Programming error? @b #%b claimed for no reason in process_bad_@b.\n" -msgstr "Interne fout?: blok %b is zonder reden geclaimd in process_bad_block.\n" +msgstr "Interne fout?: blok %b is zonder reden geclaimd in process_bad_block().\n" #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n #: e2fsck/problem.c:508 @@ -1218,7 +1218,7 @@ #: e2fsck/problem.c:548 #, c-format msgid "@A icount link information: %m\n" -msgstr "Fout tijdens reserveren van icount-link-informatie: %m\n" +msgstr "Fout tijdens reserveren van 'icount'-link-informatie: %m\n" #. @-expanded: error allocating directory block array: %m\n #: e2fsck/problem.c:553 @@ -1291,7 +1291,7 @@ #. @-expanded: journal is not regular file. #: e2fsck/problem.c:618 msgid "@j is not regular file. " -msgstr "journal is geen normaal bestand. " +msgstr "Journal is geen normaal bestand. " #. @-expanded: inode %i was part of the orphaned inode list. #: e2fsck/problem.c:623 @@ -1317,7 +1317,7 @@ #. @-expanded: inode %i has a bad extended attribute block %b. #: e2fsck/problem.c:644 msgid "@i %i has a bad @a @b %b. " -msgstr "Inode %i heeft een slecht blok %b met uitgebreide kenmerken. " +msgstr "Inode %i bevat een slecht blok %b met uitgebreide kenmerken. " #. @-expanded: Error reading extended attribute block %b (%m). #: e2fsck/problem.c:649 @@ -1401,7 +1401,7 @@ #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n #: e2fsck/problem.c:723 msgid "@h %i has an unsupported hash version (%N)\n" -msgstr "Inode %i van 'htree'-map heeft een niet-ondersteunde hash-versie (%N).\n" +msgstr "Inode %i van 'htree'-map gebruikt een niet-ondersteunde hash-versie (%N).\n" #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n #: e2fsck/problem.c:728 @@ -1421,7 +1421,7 @@ "Bad @b @i has an indirect @b (%b) that conflicts with\n" "@f metadata. " msgstr "" -"Een slechte-blokken-inode heeft een indirect blok (%b) dat tegenstrijdig\n" +"Slechte-blokken-inode bevat een indirect blok (%b) dat strijdig\n" "is met de metagegevens van het bestandssysteem. " #. @-expanded: Resize inode (re)creation failed: %m. @@ -1470,9 +1470,9 @@ "Pass 1B: Rescanning for @m @bs\n" msgstr "" "\n" -"Extra doorlopen voor het verzoenen van blokken die door meer\n" -"dan één inode geclaimd worden...\n" -"Pass 1B: Opnieuw zoeken naar meervoudig-geclaimde blokken\n" +"Er zijn extra stappen nodig voor het verzoenen van blokken die door\n" +"meer dan één inode geclaimd worden...\n" +"Stap 1B: Opnieuw zoeken naar meervoudig-geclaimde blokken\n" #. @-expanded: multiply-claimed block(s) in inode %i: #: e2fsck/problem.c:787 @@ -1505,12 +1505,12 @@ #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n #: e2fsck/problem.c:823 msgid "Pass 1C: Scanning directories for @is with @m @bs\n" -msgstr "Doorloop 1C: Doorzoeken van mappen naar inodes met meervoudig-geclaimde blokken\n" +msgstr "Stap 1C: Doorzoeken van mappen naar inodes met meervoudig-geclaimde blokken\n" #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n #: e2fsck/problem.c:829 msgid "Pass 1D: Reconciling @m @bs\n" -msgstr "Doorloop 1D: Verzoenen van meervoudig-geclaimde blokken\n" +msgstr "Stap 1D: Verzoenen van meervoudig-geclaimde blokken\n" #. @-expanded: File %Q (inode #%i, mod time %IM) \n #. @-expanded: has %B multiply-claimed block(s), shared with %N file(s):\n @@ -1520,7 +1520,7 @@ " has %B @m @b(s), shared with %N file(s):\n" msgstr "" "Bestand %Q (inode %i, wijzigingstijd %IM)\n" -" heeft %B meervoudig-geclaimd(e) blok(ken), gedeeld met %N bestand(en):\n" +" bevat %B meervoudig-geclaimd(e) blok(ken), gedeeld met %N bestand(en):\n" #. @-expanded: \t%Q (inode #%i, mod time %IM)\n #: e2fsck/problem.c:840 @@ -1560,7 +1560,7 @@ #. @-expanded: Pass 2: Checking directory structure\n #: e2fsck/problem.c:874 msgid "Pass 2: Checking @d structure\n" -msgstr "Doorloop 2: Controle van mappenstructuur\n" +msgstr "Stap 2: Controle van mappenstructuur\n" #. @-expanded: invalid inode number for '.' in directory inode %i.\n #: e2fsck/problem.c:879 @@ -1576,7 +1576,7 @@ #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di. #: e2fsck/problem.c:889 msgid "@E has @D/unused @i %Di. " -msgstr "@E heeft een verwijderde of ongebruikte inode %Di. " +msgstr "@E bevat een verwijderde of ongebruikte inode %Di. " #. @-expanded: entry '%Dn' in %p (%i) is a link to '.' #: e2fsck/problem.c:894 @@ -1628,27 +1628,27 @@ #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n #: e2fsck/problem.c:939 msgid "i_faddr @F %IF, @s zero.\n" -msgstr "i_faddr @F is %IF, moet nul zijn.\n" +msgstr "'i_faddr' @F is %IF, moet nul zijn.\n" #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n #: e2fsck/problem.c:944 msgid "i_file_acl @F %If, @s zero.\n" -msgstr "i_file_acl @F is %If, moet nul zijn.\n" +msgstr "'i_file_acl' @F is %If, moet nul zijn.\n" #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n #: e2fsck/problem.c:949 msgid "i_dir_acl @F %Id, @s zero.\n" -msgstr "i_dir_acl @F is %Id, moet nul zijn.\n" +msgstr "'i_dir_acl' @F is %Id, moet nul zijn.\n" #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n #: e2fsck/problem.c:954 msgid "i_frag @F %N, @s zero.\n" -msgstr "i_frag @F is %N, moet nul zijn.\n" +msgstr "'i_frag' @F is %N, moet nul zijn.\n" #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n #: e2fsck/problem.c:959 msgid "i_fsize @F %N, @s zero.\n" -msgstr "i_fsize @F is %N, moet nul zijn.\n" +msgstr "'i_fsize' @F is %N, moet nul zijn.\n" #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n #: e2fsck/problem.c:964 @@ -1685,12 +1685,12 @@ #. @-expanded: inode %i (%Q) is an illegal character device.\n #: e2fsck/problem.c:994 msgid "@i %i (%Q) is an @I character @v.\n" -msgstr "Inode %i (%Q) is een ongeldig byteapparaat.\n" +msgstr "Inode %i (%Q) is een ongeldig byte-apparaat.\n" #. @-expanded: inode %i (%Q) is an illegal block device.\n #: e2fsck/problem.c:999 msgid "@i %i (%Q) is an @I @b @v.\n" -msgstr "Inode %i (%Q) is een ongeldig blokapparaat.\n" +msgstr "Inode %i (%Q) is een ongeldig blok-apparaat.\n" #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n #: e2fsck/problem.c:1004 @@ -1878,13 +1878,13 @@ "\n" msgstr "" "Dubbel item '%Dn' gevonden.\n" -"\tMap %p (%i) wordt gemarkeerd om opnieuw te worden opgebouwd.\n" +" Map %p (%i) wordt gemarkeerd om opnieuw te worden opgebouwd.\n" "\n" #. @-expanded: Pass 3: Checking directory connectivity\n #: e2fsck/problem.c:1180 msgid "Pass 3: Checking @d connectivity\n" -msgstr "Doorloop 3: Controle van verbindingen tussen mappen\n" +msgstr "Stap 3: Controle van verbindingen tussen mappen\n" #. @-expanded: root inode not allocated. #: e2fsck/problem.c:1185 @@ -1938,25 +1938,25 @@ #: e2fsck/problem.c:1230 #, c-format msgid "ext2fs_new_@b: %m while trying to create /@l @d\n" -msgstr "ext2fs_new_@b: %m tijdens maken van /lost+found\n" +msgstr "ext2fs_new_block(): %m tijdens maken van /lost+found\n" #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n #: e2fsck/problem.c:1235 #, c-format msgid "ext2fs_new_@i: %m while trying to create /@l @d\n" -msgstr "ext2fs_new_@i: %m tijdens maken van /lost+found\n" +msgstr "ext2fs_new_inode(): %m tijdens maken van /lost+found\n" #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n #: e2fsck/problem.c:1240 #, c-format msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n" -msgstr "ext2fs_new_dir_@b: %m tijdens maken van nieuw mapblok\n" +msgstr "ext2fs_new_dir_block(): %m tijdens maken van nieuw mapblok\n" #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n #: e2fsck/problem.c:1245 #, c-format msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n" -msgstr "ext2fs_write_dir_@b: %m tijdens maken van mapblok voor /lost+found\n" +msgstr "ext2fs_write_dir_block(): %m tijdens maken van mapblok voor /lost+found\n" #. @-expanded: Error while adjusting inode count on inode %i\n #: e2fsck/problem.c:1250 @@ -2001,7 +2001,7 @@ #. @-expanded: root inode is not a directory; aborting.\n #: e2fsck/problem.c:1280 msgid "@r is not a @d; aborting.\n" -msgstr "De root-inode is geen map; e2fsck breekt nu af.\n" +msgstr "De root-inode is geen map. Gestopt.\n" #. @-expanded: Cannot proceed without a root inode.\n #: e2fsck/problem.c:1285 @@ -2016,12 +2016,12 @@ #: e2fsck/problem.c:1302 msgid "Pass 3A: Optimizing directories\n" -msgstr "Doorloop 3A: Optimalisatie van mappen\n" +msgstr "Stap 3A: Optimalisatie van mappen\n" #: e2fsck/problem.c:1307 #, c-format msgid "Failed to create dirs_to_hash iterator: %m" -msgstr "Maken van dirs_to_hash-iterator is mislukt: %m" +msgstr "Maken van 'dirs_to_hash-iterator' is mislukt: %m" #: e2fsck/problem.c:1312 msgid "Failed to optimize directory %q (%d): %m" @@ -2033,7 +2033,7 @@ #: e2fsck/problem.c:1334 msgid "Pass 4: Checking reference counts\n" -msgstr "Doorloop 4: Controle van verwijzingsaantallen\n" +msgstr "Stap 4: Controle van verwijzingsaantallen\n" #. @-expanded: unattached zero-length inode %i. #: e2fsck/problem.c:1339 @@ -2062,7 +2062,7 @@ "@i_link_info[%i] is %N, @i.i_links_count is %Il. They @s the same!\n" msgstr "" "WAARSCHUWING: programmafout in e2fsck!\n" -" OF IEMAND (U) IS EEN AANGEKOPPELD BESTANDSSYSTEEM AAN HET CONTROLEREN!\n" +" *of* U BENT EEN AANGEKOPPELD BESTANDSSYSTEEM AAN HET CONTROLEREN!\n" "\n" "inode_link_info[%i] is %N, inode.i_links_count is %Il.\n" "Deze horen hetzelfde te zijn!\n" @@ -2070,7 +2070,7 @@ #. @-expanded: Pass 5: Checking group summary information\n #: e2fsck/problem.c:1363 msgid "Pass 5: Checking @g summary information\n" -msgstr "Doorloop 5: Controle van groepssamenvattingen\n" +msgstr "Stap 5: Controle van groepssamenvattingen\n" #. @-expanded: Padding at end of inode bitmap is not set. #: e2fsck/problem.c:1368 @@ -2121,7 +2121,7 @@ #. @-expanded: endpoints (%i, %j)\n #: e2fsck/problem.c:1443 msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n" -msgstr "Programmafout in e2fsck: in bestandssysteem %N komen de bitkaart-eindpunten (%b, %c) niet overeen met de berekende eindpunten (%i, %j)\n" +msgstr "PROGRAMMAFOUT in e2fsck: in bestandssysteem %N komen de bitkaart-eindpunten (%b, %c) niet overeen met de berekende eindpunten (%i, %j)\n" #: e2fsck/problem.c:1449 msgid "Internal error: fudging end of bitmap (%N)\n" @@ -2142,7 +2142,7 @@ #: e2fsck/problem.c:1597 #, c-format msgid "Unhandled error code (0x%x)!\n" -msgstr "Onbehandelde foutcode (0x%x)!\n" +msgstr "Onbekende foutcode (0x%x)!\n" #: e2fsck/problem.c:1691 msgid "IGNORED" @@ -2164,29 +2164,29 @@ #: e2fsck/scantest.c:132 msgid "while doing inode scan" -msgstr "tijdens uitvoeren van inode-scan" +msgstr "tijdens uitvoering van inode-scan" #: e2fsck/super.c:200 #, c-format msgid "while calling ext2fs_block_iterate for inode %d" -msgstr "tijdens aanroep van ext2fs_block_iterate voor inode %d" +msgstr "tijdens aanroep van ext2fs_block_iterate() voor inode %d" #: e2fsck/super.c:223 #, c-format msgid "while calling ext2fs_adjust_ea_refocunt for inode %d" -msgstr "tijdens aanroep van ext2fs_adjust_ea_refocunt voor inode %d" +msgstr "tijdens aanroep van ext2fs_adjust_ea_refcount() voor inode %d" #: e2fsck/super.c:281 msgid "Truncating" -msgstr "Bezig met afkappen" +msgstr "Afkappen" #: e2fsck/super.c:282 msgid "Clearing" -msgstr "Bezig met wissen" +msgstr "Wissen" #: e2fsck/swapfs.c:98 msgid "while calling ext2fs_block_iterate" -msgstr "tijdens aanroep van ext2fs_block_iterate" +msgstr "tijdens aanroep van ext2fs_block_iterate()" #: e2fsck/swapfs.c:104 msgid "while calling iterator function" @@ -2209,7 +2209,7 @@ #: e2fsck/swapfs.c:223 #, c-format msgid "Pass 0: Doing byte-swap of filesystem\n" -msgstr "Doorloop 0: Verwisseling van hoge en lage bytes in hele bestandssysteem\n" +msgstr "Stap 0: Verwisseling van hoge en lage bytes in hele bestandssysteem\n" #: e2fsck/swapfs.c:230 #, c-format @@ -2251,10 +2251,10 @@ "\n" "Noodhulp:\n" " -p Automatische reparatie (zonder vragen)\n" -" -n Bestandssyteem niet veranderen\n" +" -n Bestandssyteem niet veranderen; op alle vragen \"nee\" aannemen\n" " -y Als antwoord op alle vragen \"ja\" aannemen\n" " -c Op slechte blokken controleren en deze aan lijst toevoegen\n" -" -f Controle forceren ook als bestandssysteem schoon is\n" +" -f Een controle afdwingen, ook als het bestandssysteem schoon is\n" #: e2fsck/unix.c:86 #, c-format @@ -2304,7 +2304,7 @@ "Cannot continue, aborting.\n" "\n" msgstr "" -"Kan niet verder; e2fsck breekt af.\n" +"Kan niet verder. Gestopt.\n" "\n" #: e2fsck/unix.c:202 @@ -2330,7 +2330,7 @@ #: e2fsck/unix.c:207 #, c-format msgid "check aborted.\n" -msgstr "controle afgebroken.\n" +msgstr "controle is afgebroken.\n" #: e2fsck/unix.c:277 msgid " contains a file system with errors" @@ -2352,7 +2352,7 @@ #: e2fsck/unix.c:300 msgid ", check forced.\n" -msgstr ", geforceerde controle.\n" +msgstr ", gedwongen controle.\n" #: e2fsck/unix.c:303 #, c-format @@ -2394,7 +2394,7 @@ "\t%s\n" msgstr "" "Syntaxfout in e2fsck-configuratiebestand (%s, regel #%d)\n" -"\t%s\n" +" %s\n" #: e2fsck/unix.c:623 #, c-format @@ -2455,15 +2455,15 @@ #: e2fsck/unix.c:940 #, c-format msgid "%s trying backup blocks...\n" -msgstr "%s zoeken naar reservekopieën...\n" +msgstr "%s reservekopieën worden bekeken...\n" #: e2fsck/unix.c:941 msgid "Couldn't find ext2 superblock," -msgstr "Kan het ext2-superblok niet vinden," +msgstr "Kan het ext2-superblok niet vinden --" #: e2fsck/unix.c:942 msgid "Group descriptors look bad..." -msgstr "Groepsdescriptors zien er slecht uit..." +msgstr "Groepsbeschrijvers zien er slecht uit --" #: e2fsck/unix.c:953 #, c-format @@ -2542,7 +2542,7 @@ "\tbut filesystem %s has HTREE directories.\n" msgstr "" "Deze e2fsck is niet gecompileerd met 'htree'-ondersteuning,\n" -"\tmaar bestandssysteem %s heeft 'htree'-mappen.\n" +"maar het bestandssysteem %s bevat 'htree'-mappen.\n" #: e2fsck/unix.c:1118 #, c-format @@ -2588,7 +2588,7 @@ #: e2fsck/unix.c:1174 #, c-format msgid "%s: ***** REBOOT LINUX *****\n" -msgstr "%s: ***** REBOOTEN *****\n" +msgstr "%s: ***** HERSTART UW SYSTEEM *****\n" #: e2fsck/unix.c:1182 #, c-format @@ -2670,7 +2670,7 @@ #: e2fsck/util.c:213 #, c-format msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s" -msgstr "e2fsck_read_bitmaps: ongeldige bitkaartblokken voor %s" +msgstr "e2fsck_read_bitmaps(): ongeldige bitkaartblokken voor %s" #: e2fsck/util.c:218 msgid "reading inode and block bitmaps" @@ -2710,7 +2710,7 @@ "\n" "\n" "%s: ONVERWACHTE INCONSISTENTIE; voer 'fsck' met de hand uit\n" -"\t(dat wil zeggen: zonder de opties '-a' of '-p').\n" +" (dat wil zeggen: zonder de opties '-a' of '-p').\n" #: e2fsck/util.c:330 #, c-format @@ -2744,7 +2744,7 @@ #: misc/badblocks.c:60 msgid "done \n" -msgstr "klaar \n" +msgstr "voltooid \n" #: misc/badblocks.c:78 #, c-format @@ -2840,7 +2840,9 @@ #: misc/badblocks.c:786 msgid "badblocks forced anyway. Hope /etc/mtab is incorrect.\n" -msgstr "'badblocks' wordt geforceerd uitgevoerd, hopend dat /etc/mtab onjuist is.\n" +msgstr "" +"maar 'badblocks' wordt gedwongen uitgevoerd.\n" +"Hoop dat /etc/mtab onjuist is.\n" #: misc/badblocks.c:791 msgid "it's not safe to run badblocks!\n" @@ -2853,17 +2855,17 @@ #: misc/badblocks.c:799 msgid "badblocks forced anyway.\n" -msgstr "'badblocks' wordt geforceerd uitgevoerd.\n" +msgstr "maar 'badblocks' wordt gedwongen uitgevoerd.\n" #: misc/badblocks.c:861 #, c-format msgid "bad block size - %s" -msgstr "ongeldige blokgrootte - %s" +msgstr "ongeldige blokgrootte: %s" #: misc/badblocks.c:918 #, c-format msgid "can't allocate memory for test_pattern - %s" -msgstr "kan geen geheugen reserveren voor testpatroon - %s" +msgstr "kan geen geheugen reserveren voor testpatroon -- %s" #: misc/badblocks.c:932 #, c-format @@ -2891,12 +2893,12 @@ #: misc/badblocks.c:980 misc/mke2fs.c:1155 #, c-format msgid "invalid blocks count - %s" -msgstr "ongeldig blokkenaantal - %s" +msgstr "ongeldig blokkenaantal: %s" #: misc/badblocks.c:989 #, c-format msgid "invalid starting block - %s" -msgstr "ongeldig beginblok - %s" +msgstr "ongeldig beginblok: %s" #: misc/badblocks.c:995 #, c-format @@ -2924,7 +2926,7 @@ #: misc/chattr.c:148 #, c-format msgid "bad version - %s\n" -msgstr "ongeldige versie - %s\n" +msgstr "ongeldige versie: %s\n" #: misc/chattr.c:192 misc/lsattr.c:113 #, c-format @@ -2958,7 +2960,7 @@ #: misc/chattr.c:255 msgid "Couldn't allocate path variable in chattr_dir_proc" -msgstr "Kan geen padvariabele reserveren in chattr_dir_proc" +msgstr "Kan geen padvariabele reserveren in chattr_dir_proc()" #: misc/chattr.c:291 msgid "= is incompatible with - and +\n" @@ -3203,9 +3205,9 @@ "\tshould fix your /etc/fstab file as soon as you can.\n" "\n" msgstr "" -"WAARSCHUWING: /etc/fstab bevat geen zesde veld (een fsck-doorloopnummer).\n" -" Er wordt nu omheen gewerkt, maar u zou dit veld bij\n" -" de eerstvolgende gelegenheid toe dienen te voegen.\n" +"WAARSCHUWING: /etc/fstab bevat geen zesde veld (een fsck-volgnummer).\n" +" Er wordt nu omheengewerkt, maar u zou dit veld bij\n" +" de eerstvolgende gelegenheid toe dienen te voegen.\n" "\n" #: misc/fsck.c:472 @@ -3262,7 +3264,7 @@ #: misc/fsck.c:1031 #, c-format msgid "--waiting-- (pass %d)\n" -msgstr "--wachten-- (doorloop %d)\n" +msgstr "--wachten-- (volgnummer %d)\n" #: misc/fsck.c:1051 msgid "Usage: fsck [-ANPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n" @@ -3314,7 +3316,7 @@ #: misc/mke2fs.c:195 #, c-format msgid "Running command: %s\n" -msgstr "Uitvoering van opdracht: %s\n" +msgstr "Uitgevoerde opdracht is: %s\n" #: misc/mke2fs.c:199 #, c-format @@ -3333,11 +3335,13 @@ #: misc/mke2fs.c:235 #, c-format msgid "Blocks %u through %d must be good in order to build a filesystem.\n" -msgstr "Blokken %u tot en met %d moeten goed zijn om een bestandssysteem te kunnen maken.\n" +msgstr "" +"Blokken %u tot en met %d moeten goed zijn\n" +"om een bestandssysteem te kunnen maken.\n" #: misc/mke2fs.c:238 msgid "Aborting....\n" -msgstr "Bezig met afbreken...\n" +msgstr "Gestopt...\n" #: misc/mke2fs.c:258 #, c-format @@ -3346,17 +3350,17 @@ "\tbad blocks.\n" "\n" msgstr "" -"Waarschuwing: de reservekopie van het superblok of van de groepsbeschrijvers\n" -" beginnend bij blok %u bevat slechte blokken.\n" +"Waarschuwing: de reservekopie van het superblok en de groepsbeschrijvers,\n" +"beginnend bij blok %u, bevat slechte blokken.\n" "\n" #: misc/mke2fs.c:276 msgid "while marking bad blocks as used" -msgstr "tijdens het markeren van slechte blokken als gebruikt" +msgstr "tijdens het markeren van slechte blokken (als zijnde in gebruik)" #: misc/mke2fs.c:334 msgid "done \n" -msgstr "klaar \n" +msgstr "voltooid \n" #: misc/mke2fs.c:369 msgid "while allocating zeroizing buffer" @@ -3471,7 +3475,7 @@ #: misc/mke2fs.c:642 #, c-format msgid "%u blocks (%2.2f%%) reserved for the super user\n" -msgstr "%u blokken (%2.2f%%) gereserveerd voor de superuser\n" +msgstr "%u blokken (%2.2f%%) gereserveerd voor systeembeheer\n" #: misc/mke2fs.c:645 #, c-format @@ -3561,7 +3565,7 @@ "\t%s\n" msgstr "" "Syntaxfout in mke2fs-configuratiebestand (%s, regel #%d)\n" -"\t%s\n" +" %s\n" #: misc/mke2fs.c:841 misc/tune2fs.c:303 #, c-format @@ -3571,7 +3575,7 @@ #: misc/mke2fs.c:938 #, c-format msgid "invalid block size - %s" -msgstr "ongeldige blokgrootte - %s" +msgstr "ongeldige blokgrootte: %s" #: misc/mke2fs.c:942 #, c-format @@ -3581,7 +3585,7 @@ #: misc/mke2fs.c:959 #, c-format msgid "invalid fragment size - %s" -msgstr "ongeldige fragmentgrootte - %s" +msgstr "ongeldige fragmentgrootte: %s" #: misc/mke2fs.c:965 #, c-format @@ -3603,29 +3607,29 @@ #: misc/mke2fs.c:1004 msgid "in malloc for bad_blocks_filename" -msgstr "onvoldoende geheugen" +msgstr "onvoldoende geheugen in bad_blocks_filename()" #: misc/mke2fs.c:1013 #, c-format msgid "invalid reserved blocks percent - %s" -msgstr "ongeldig percentage gereserveerde blokken - %s" +msgstr "ongeldig percentage gereserveerde blokken: %s" # lib/prange.c:299 lib/prange.c:316 #: misc/mke2fs.c:1031 #, c-format msgid "bad revision level - %s" -msgstr "ongeldig versienummer - %s" +msgstr "ongeldig versienummer: %s" #: misc/mke2fs.c:1044 #, c-format msgid "invalid inode size - %s" -msgstr "ongeldige grootte van inode - %s" +msgstr "ongeldige grootte van inode: %s" # lib/prange.c:299 lib/prange.c:316 #: misc/mke2fs.c:1065 #, c-format msgid "bad num inodes - %s" -msgstr "ongeldig aantal inodes - %s" +msgstr "ongeldig aantal inodes: %s" #: misc/mke2fs.c:1123 misc/mke2fs.c:1588 #, c-format @@ -3646,8 +3650,8 @@ #, c-format msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n" msgstr "" -"Waarschuwing: blokken van %d bytes zijn te groot voor dit systeem (max %d),\n" -"maar er wordt geforceerd doorgegaan.\n" +"Waarschuwing: blokken van %d bytes zijn te groot voor dit systeem,\n" +"het maximum is %d -- maar 'mke2fs' wordt gedwongen uitgevoerd.\n" #: misc/mke2fs.c:1165 msgid "filesystem" @@ -3704,8 +3708,8 @@ "Filesystem too large. No more than 2**31-1 blocks\n" "\t (8TB using a blocksize of 4k) are currently supported." msgstr "" -"Bestandssysteem is te groot. Niet meer dan 2**31-1 blokken\n" -"\t (8TB bij een blokgrootte van 4K) worden momenteel ondersteund." +"Bestandssysteem is te groot. Momenteel zijn niet meer dan\n" +"2**31-1 blokken mogelijk (8TB bij een blokgrootte van 4K)." #: misc/mke2fs.c:1372 #, c-format @@ -3737,7 +3741,7 @@ #: misc/mke2fs.c:1472 #, c-format msgid "unknown os - %s" -msgstr "onbekend besturingssysteem - %s" +msgstr "onbekend besturingssysteem: %s" #: misc/mke2fs.c:1526 msgid "while trying to allocate filesystem tables" @@ -3786,7 +3790,7 @@ "\twhile trying to create journal" msgstr "" "\n" -"\ttijdens aanmaken van journal" +" tijdens aanmaken van journal" #: misc/mke2fs.c:1636 #, c-format @@ -3906,7 +3910,7 @@ "\twhile trying to open journal on %s\n" msgstr "" "\n" -"\ttijdens openen van journal op %s\n" +" tijdens openen van journal op %s\n" #: misc/tune2fs.c:404 #, c-format @@ -3928,7 +3932,7 @@ "\twhile trying to create journal file" msgstr "" "\n" -"\ttijdens aanmaken van journal-inode" +" tijdens aanmaken van journal-inode" #: misc/tune2fs.c:493 #, c-format @@ -3972,7 +3976,7 @@ #: misc/tune2fs.c:663 #, c-format msgid "bad reserved blocks count - %s" -msgstr "onjuiste aantal gereserveerde blokken: %s" +msgstr "onjuist aantal gereserveerde blokken: %s" #: misc/tune2fs.c:692 #, c-format @@ -4017,7 +4021,7 @@ #: misc/tune2fs.c:840 #, c-format msgid "Setting reserved blocks count to %lu\n" -msgstr "Aantal gereserveerde blokken is op %lu gezet\n" +msgstr "Het aantal gereserveerde blokken is op %lu gezet\n" #: misc/tune2fs.c:846 msgid "" @@ -4042,7 +4046,7 @@ "The filesystem already has sparse superblocks disabled.\n" msgstr "" "\n" -"Het bestandssysteem is al niet zuinig met superblokken.\n" +"Het bestandssysteem gebruikt al het normale aantal superblokken.\n" #: misc/tune2fs.c:868 #, c-format @@ -4096,7 +4100,7 @@ #: misc/util.c:158 msgid "mke2fs forced anyway. Hope /etc/mtab is incorrect.\n" -msgstr "'mke2fs' wordt geforceerd uitgevoerd, hopend dat /etc/mtab onjuist is.\n" +msgstr "'mke2fs' wordt gedwongen uitgevoerd. Hoop dat /etc/mtab onjuist is.\n" #: misc/util.c:163 #, c-format @@ -4105,7 +4109,7 @@ #: misc/util.c:170 msgid "mke2fs forced anyway.\n" -msgstr "'mke2fs' wordt geforceerd uitgevoerd.\n" +msgstr "'mke2fs' wordt gedwongen uitgevoerd.\n" #: misc/util.c:186 msgid "Couldn't allocate memory to parse journal options!\n" @@ -4155,8 +4159,8 @@ "between 1024 and 102400 blocks. Aborting.\n" msgstr "" "\n" -"De gevraagde journal-afmeting is %d blokken; deze dient\n" -"tussen de 1024 and 102400 blokken te liggen.\n" +"De gevraagde journal-afmeting is %d blokken; maar deze dient\n" +"tussen de 1024 and 102400 blokken te liggen. Gestopt.\n" #: misc/util.c:270 msgid "" @@ -4226,12 +4230,12 @@ #: resize/main.c:76 msgid "Unknown pass?!?" -msgstr "Onbekende doorloop?!?" +msgstr "Onbekende stap?!?" #: resize/main.c:79 #, c-format msgid "Begin pass %d (max = %lu)\n" -msgstr "Begin van doorloop %d (max = %lu)\n" +msgstr "Begin van stap %d (max = %lu)\n" #: resize/main.c:200 #, c-format @@ -4306,4 +4310,4 @@ #: resize/resize2fs.c:1528 #, c-format msgid "Should never happen: resize inode corrupt!\n" -msgstr "Zou nooit mogen gebeuren: de resize-inode is beschadigd!\n" +msgstr "Zou nooit mogen gebeuren: de 'resize'-inode is beschadigd!\n" Binary files e2fsprogs-1.39/po/vi.gmo and e2fsprogs-1.39-tyt1/po/vi.gmo differ diff -Nru e2fsprogs-1.39/po/vi.po e2fsprogs-1.39-tyt1/po/vi.po --- e2fsprogs-1.39/po/vi.po 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/po/vi.po 2006-10-06 23:42:52.000000000 -0400 @@ -0,0 +1,4365 @@ +# Vietnamese translation for e2fsprogs. +# Copyright © 2006 Free Software Foundation, Inc. +# Clytie Siddall , 2006. +# +#. The strings in e2fsck's problem.c can be very hard to translate, +#. since the strings are expanded in two different ways. First of all, +#. there is an @-expansion, where strings like "@i" are expanded to +#. "inode", and so on. In order to make it easier for translators, the +#. e2fsprogs po template file has been enhanced with comments that show +#. the @-expansion, for the strings in the problem.c file. +#. +#. Translators are free to use the @-expansion facility if they so +#. choose, by providing translations for strings in e2fsck/message.c. +#. These translation can completely replace an expansion; for example, +#. if "bblock" (which indicated that "@b" would be expanded to "block") +#. is translated as "ddatenverlust", then "@d" will be expanded to +#. "datenverlust". Alternatively, translators can simply not use the +#. @-expansion facility at all. +#. +#. The second expansion which is done for e2fsck's problem.c messages is +#. a dynamic %-expansion, which expands %i as an inode number, and so +#. on. A table of these expansions can be found below. Note that +#. %-expressions that begin with "%D" and "%I" are two-character +#. expansions; so for example, "%Iu" expands to the inode's user id +#. ownership field (inode->i_uid). +#. +#. %b block number +#. %B integer +#. %c block number +#. %Di -> ino inode number +#. %Dn -> name string +#. %Dr -> rec_len +#. %Dl -> name_len +#. %Dt -> filetype +#. %d inode number +#. %g integer +#. %i inode number +#. %Is -> i_size +#. %IS -> i_extra_isize +#. %Ib -> i_blocks +#. %Il -> i_links_count +#. %Im -> i_mode +#. %IM -> i_mtime +#. %IF -> i_faddr +#. %If -> i_file_acl +#. %Id -> i_dir_acl +#. %Iu -> i_uid +#. %Ig -> i_gid +#. %j inode number +#. %m +#. %N +#. %p ext2fs_get_pathname of directory +#. %P ext2fs_get_pathname of ->ino with as +#. the containing directory. (If dirent is NULL +#. then return the pathname of directory ) +#. %q ext2fs_get_pathname of directory +#. %Q ext2fs_get_pathname of directory with as +#. the containing directory. +#. %s miscellaneous string +#. %S backup superblock +#. %X hexadecimal format +#. +msgid "" +msgstr "" +"Project-Id-Version: e2fsprogs 1.39-b2.vi.po\n" +"Report-Msgid-Bugs-To: tytso@alum.mit.edu\n" +"POT-Creation-Date: 2006-03-29 15:30-0500\n" +"PO-Revision-Date: 2006-06-03 16:48+0930\n" +"Last-Translator: Clytie Siddall \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0\n" +"X-Generator: LocFactoryEditor 1.6b36\n" + +#: e2fsck/badblocks.c:22 misc/mke2fs.c:154 +#, c-format +msgid "Bad block %u out of range; ignored.\n" +msgstr "Khối hỏng %u ở ngoại phạm vị nên bị bỏ qua.\n" + +#: e2fsck/badblocks.c:45 +msgid "while sanity checking the bad blocks inode" +msgstr "trong khi kiểm tra sự đúng mực nút inode khối hỏng" + +#: e2fsck/badblocks.c:57 +msgid "while reading the bad blocks inode" +msgstr "trong khi đọc nút inode khối hỏng" + +#: e2fsck/badblocks.c:71 e2fsck/iscan.c:112 e2fsck/scantest.c:109 +#: e2fsck/unix.c:950 e2fsck/unix.c:986 misc/badblocks.c:1005 +#: misc/badblocks.c:1013 misc/badblocks.c:1027 misc/badblocks.c:1039 +#: misc/dumpe2fs.c:369 misc/e2image.c:567 misc/e2image.c:660 +#: misc/e2image.c:676 misc/mke2fs.c:170 misc/tune2fs.c:776 resize/main.c:243 +#, c-format +msgid "while trying to open %s" +msgstr "trong khi cố gắng mở %s" + +#: e2fsck/badblocks.c:82 +#, c-format +msgid "while trying popen '%s'" +msgstr "trong khi cố gắng mở popen « %s »" + +#: e2fsck/badblocks.c:93 misc/mke2fs.c:177 +msgid "while reading in list of bad blocks from file" +msgstr "trong khi đọc vào danh sách các khối hỏng từ tập tin" + +#: e2fsck/badblocks.c:103 +msgid "while updating bad block inode" +msgstr "trong khi cập nhật nút inode khối hỏng" + +#: e2fsck/badblocks.c:129 +#, c-format +msgid "Warning: illegal block %u found in bad block inode. Cleared.\n" +msgstr "Cảnh báo : tìm thấy khối cấm %u trong nút inode khối hỏng nên bị xoá.\n" + +#: e2fsck/ehandler.c:53 +#, c-format +msgid "Error reading block %lu (%s) while %s. " +msgstr "Gặp lỗi khi đọc khối %lu (%s) trong khi %s. " + +#: e2fsck/ehandler.c:56 +#, c-format +msgid "Error reading block %lu (%s). " +msgstr "Gặp lỗi khi đọc khối %lu (%s). " + +#: e2fsck/ehandler.c:59 e2fsck/ehandler.c:106 +msgid "Ignore error" +msgstr "Bỏ qua lỗi" + +#: e2fsck/ehandler.c:60 +msgid "Force rewrite" +msgstr "Buộc ghi lại" + +#: e2fsck/ehandler.c:100 +#, c-format +msgid "Error writing block %lu (%s) while %s. " +msgstr "Găp lỗi khi ghi khối %lu (%s) trong khi %s. " + +#: e2fsck/ehandler.c:103 +#, c-format +msgid "Error writing block %lu (%s). " +msgstr "Gặp lỗi khi ghi khối %lu (%s). " + +#: e2fsck/emptydir.c:56 +msgid "empty dirblocks" +msgstr "khối thư mục rỗng" + +#: e2fsck/emptydir.c:61 +msgid "empty dir map" +msgstr "sơ đồ thư mục rỗng" + +#: e2fsck/emptydir.c:97 +#, c-format +msgid "Empty directory block %u (#%d) in inode %d\n" +msgstr "Khối thư mục rỗng %u (#%d) trong nút inode %d\n" + +#: e2fsck/extend.c:21 +#, c-format +msgid "%s: %s filename nblocks blocksize\n" +msgstr "%s: %s tên tập tin số khối cỡ khối\n" + +#: e2fsck/extend.c:43 +#, c-format +msgid "Illegal number of blocks!\n" +msgstr "Không cho phép số khối đó !\n" + +#: e2fsck/extend.c:49 +#, c-format +msgid "Couldn't allocate block buffer (size=%d)\n" +msgstr "Không thể cấp phát bộ đệm khối (cỡ=%d)\n" + +#: e2fsck/flushb.c:34 +#, c-format +msgid "Usage: %s disk\n" +msgstr "Cách sử dụng: %s đĩa\n" + +#: e2fsck/flushb.c:63 +#, c-format +msgid "BLKFLSBUF ioctl not supported! Can't flush buffers.\n" +msgstr "BLKFLSBUF ioctl không được hỗ trợ ! Không thể xoá sạch các bộ đệm.\n" + +#: e2fsck/iscan.c:46 +#, c-format +msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n" +msgstr "Cách sử dụng: %s [-F] [-I các_khối_đệm_inode] thiết_bị\n" + +#: e2fsck/iscan.c:83 e2fsck/unix.c:767 +#, c-format +msgid "while opening %s for flushing" +msgstr "trong khi mở %s để xoá sạch" + +#: e2fsck/iscan.c:88 e2fsck/unix.c:773 resize/main.c:221 +#, c-format +msgid "while trying to flush %s" +msgstr "trong khi cố gắng xoá sạch %s" + +#: e2fsck/iscan.c:121 e2fsck/scantest.c:116 misc/e2image.c:477 +msgid "while opening inode scan" +msgstr "trong khi mở việc quét nút inode" + +#: e2fsck/iscan.c:129 misc/e2image.c:495 +msgid "while getting next inode" +msgstr "trong khi lấy nút inode kế tiếp" + +#: e2fsck/iscan.c:138 +#, c-format +msgid "%d inodes scanned.\n" +msgstr "%d nút inode đã được quét.\n" + +#: e2fsck/journal.c:463 +msgid "reading journal superblock\n" +msgstr "đang đọc siêu khối nhật ký\n" + +#: e2fsck/journal.c:520 +#, c-format +msgid "%s: no valid journal superblock found\n" +msgstr "%s: kôhng tìm thấy siêu khối nhật ký hợp lệ\n" + +#: e2fsck/journal.c:529 +#, c-format +msgid "%s: journal too short\n" +msgstr "%s: nhật ký quá ngắn\n" + +#: e2fsck/journal.c:802 +#, c-format +msgid "%s: recovering journal\n" +msgstr "%s: đang phục hồi nhật ký\n" + +#: e2fsck/journal.c:804 +#, c-format +msgid "%s: won't do journal recovery while read-only\n" +msgstr "%s: sẽ không phục hồi nhật ký trong khi có trạng thái chỉ đọc\n" + +#: e2fsck/journal.c:825 +#, c-format +msgid "while trying to re-open %s" +msgstr "trong khi cố gắng mở lại %s" + +#: e2fsck/message.c:108 +msgid "aextended attribute" +msgstr "athuộc tính đã mở rộng" + +#: e2fsck/message.c:109 +msgid "Aerror allocating" +msgstr "Acấp phát lỗi" + +#: e2fsck/message.c:110 +msgid "bblock" +msgstr "bkhối" + +#: e2fsck/message.c:111 +msgid "Bbitmap" +msgstr "Bsơ đồ bit" + +#: e2fsck/message.c:112 +msgid "ccompress" +msgstr "cnén" + +#: e2fsck/message.c:113 +msgid "Cconflicts with some other fs @b" +msgstr "Cxung đột với hệ thống tập tin khác @b" + +#: e2fsck/message.c:114 +msgid "iinode" +msgstr "iinode" + +#: e2fsck/message.c:115 +msgid "Iillegal" +msgstr "Icấm" + +#: e2fsck/message.c:116 +msgid "jjournal" +msgstr "jnhật ký" + +#: e2fsck/message.c:117 +msgid "Ddeleted" +msgstr "Dđã xoá bỏ" + +#: e2fsck/message.c:118 +msgid "ddirectory" +msgstr "dthư mục" + +#: e2fsck/message.c:119 +msgid "eentry" +msgstr "emục nhập" + +#: e2fsck/message.c:120 +msgid "E@e '%Dn' in %p (%i)" +msgstr "E@e '%Dn' trong %p (%i)" + +#: e2fsck/message.c:121 +msgid "ffilesystem" +msgstr "fhệ thống tập tin" + +#: e2fsck/message.c:122 +msgid "Ffor @i %i (%Q) is" +msgstr "Fcho @i %i (%Q) là" + +#: e2fsck/message.c:123 +msgid "ggroup" +msgstr "gnhóm" + +#: e2fsck/message.c:124 +msgid "hHTREE @d @i" +msgstr "hHCÂY @d @i" + +#: e2fsck/message.c:125 +msgid "llost+found" +msgstr "lmất+tìm" + +#: e2fsck/message.c:126 +msgid "Lis a link" +msgstr "L là liên kết" + +#: e2fsck/message.c:127 +msgid "mmultiply-claimed" +msgstr "mđã tuyên bố nhiều lần" + +#: e2fsck/message.c:128 +msgid "ninvalid" +msgstr "nkhông hợp lệ" + +#: e2fsck/message.c:129 +msgid "oorphaned" +msgstr "ocôi cút" + +#: e2fsck/message.c:130 +msgid "pproblem in" +msgstr "pvấn đề trong" + +#: e2fsck/message.c:131 +msgid "rroot @i" +msgstr "rgốc @i" + +#: e2fsck/message.c:132 +msgid "sshould be" +msgstr "snên là" + +#: e2fsck/message.c:133 +msgid "Ssuper@b" +msgstr "Ssiêu @b" + +#: e2fsck/message.c:134 +msgid "uunattached" +msgstr "uchưa gắn nối" + +#: e2fsck/message.c:135 +msgid "vdevice" +msgstr "vthiết bị" + +#: e2fsck/message.c:136 +msgid "zzero-length" +msgstr "zdài bằng không" + +#: e2fsck/message.c:147 +msgid "" +msgstr "" + +#: e2fsck/message.c:148 +msgid "" +msgstr "" + +#: e2fsck/message.c:150 +msgid "" +msgstr "" + +#: e2fsck/message.c:151 +msgid "" +msgstr "" + +#: e2fsck/message.c:152 +msgid "" +msgstr "" + +#: e2fsck/message.c:153 +msgid "" +msgstr "" + +#: e2fsck/message.c:154 +msgid "" +msgstr "" + +#: e2fsck/message.c:155 +msgid "" +msgstr "" + +#: e2fsck/message.c:156 +msgid "" +msgstr "" + +#: e2fsck/message.c:157 +msgid "" +msgstr "" + +#: e2fsck/pass1b.c:209 +msgid "multiply claimed inode map" +msgstr "sơ đồ nút inode đã tuyên bố nhiều lần" + +#: e2fsck/pass1b.c:558 e2fsck/pass1b.c:695 +#, c-format +msgid "internal error; can't find dup_blk for %u\n" +msgstr "lỗi nội bộ : không tìm thấy khối trùng dup_blk cho %u\n" + +#: e2fsck/pass1b.c:738 +msgid "returned from clone_file_block" +msgstr "được trả gởi từ khối tập tin nhái theo clone_file_block" + +#: e2fsck/pass1.c:430 +msgid "in-use inode map" +msgstr "sơ đồ nút inode đang được dùng" + +#: e2fsck/pass1.c:439 +msgid "directory inode map" +msgstr "sơ đồ nút inode thư mục" + +#: e2fsck/pass1.c:447 +msgid "regular file inode map" +msgstr "sơ đồ nút inode tập tin chuẩn" + +#: e2fsck/pass1.c:454 +msgid "in-use block map" +msgstr "sơ đồ khối đang được dùng" + +#: e2fsck/pass1.c:505 +msgid "doing inode scan" +msgstr "đang quét nút inode" + +#: e2fsck/pass1.c:917 +msgid "Pass 1" +msgstr "Lần qua 1" + +#: e2fsck/pass1.c:976 +#, c-format +msgid "reading indirect blocks of inode %u" +msgstr "đang đọc khối gián tiếp của nút inode %u" + +#: e2fsck/pass1.c:1018 +msgid "bad inode map" +msgstr "sơ đồ nút inode sai" + +#: e2fsck/pass1.c:1040 +msgid "inode in bad block map" +msgstr "nút inode trong sơ đồ khối hỏng" + +#: e2fsck/pass1.c:1060 +msgid "imagic inode map" +msgstr "sơ đồ nút inode ma thuật imagic" + +#: e2fsck/pass1.c:1087 +msgid "multiply claimed block map" +msgstr "sơ đồ khối đã tuyên bố nhiều lần" + +#: e2fsck/pass1.c:1186 +msgid "ext attr block map" +msgstr "sơ đồ khối ext attr" + +#: e2fsck/pass1.c:1959 +msgid "block bitmap" +msgstr "sơ đồ bit khối" + +#: e2fsck/pass1.c:1963 +msgid "inode bitmap" +msgstr "sơ đồ bit nút inode" + +#: e2fsck/pass1.c:1967 +msgid "inode table" +msgstr "bảng nút inode" + +#: e2fsck/pass2.c:287 +msgid "Pass 2" +msgstr "Lần qua 2" + +#: e2fsck/pass3.c:79 +msgid "inode done bitmap" +msgstr "sơ đồ bit nút inode hoàn tất" + +#: e2fsck/pass3.c:90 +msgid "Peak memory" +msgstr "Bộ nhớ cao điểm" + +#: e2fsck/pass3.c:143 +msgid "Pass 3" +msgstr "Lần qua 3" + +#: e2fsck/pass3.c:334 +msgid "inode loop detection bitmap" +msgstr "sơ đồ bit phát hiện vòng lặp nút inode" + +#: e2fsck/pass4.c:174 +msgid "Pass 4" +msgstr "Lần qua 4" + +#: e2fsck/pass5.c:70 +msgid "Pass 5" +msgstr "Lần qua 5" + +#: e2fsck/problem.c:50 +msgid "(no prompt)" +msgstr "(không có dấu nhắc)" + +#: e2fsck/problem.c:51 +msgid "Fix" +msgstr "Sửa" + +#: e2fsck/problem.c:52 +msgid "Clear" +msgstr "Xoá" + +#: e2fsck/problem.c:53 +msgid "Relocate" +msgstr "Định vị lại" + +#: e2fsck/problem.c:54 +msgid "Allocate" +msgstr "Cấp phát" + +#: e2fsck/problem.c:55 +msgid "Expand" +msgstr "Bung" + +#: e2fsck/problem.c:56 +msgid "Connect to /lost+found" +msgstr "Kết nối đến /mất+tìm" + +#: e2fsck/problem.c:57 +msgid "Create" +msgstr "Tạo" + +#: e2fsck/problem.c:58 +msgid "Salvage" +msgstr "Cứu vớt" + +#: e2fsck/problem.c:59 +msgid "Truncate" +msgstr "Cắt ngắn" + +#: e2fsck/problem.c:60 +msgid "Clear inode" +msgstr "Xoá nút inode" + +#: e2fsck/problem.c:61 +msgid "Abort" +msgstr "Hủy bỏ" + +#: e2fsck/problem.c:62 +msgid "Split" +msgstr "Chia ra" + +#: e2fsck/problem.c:63 +msgid "Continue" +msgstr "Tiếp tục" + +#: e2fsck/problem.c:64 +msgid "Clone multiply-claimed blocks" +msgstr "Nhái theo các khối đã tuyên bố nhiều lần" + +#: e2fsck/problem.c:65 +msgid "Delete file" +msgstr "Xoá bỏ tập tin" + +#: e2fsck/problem.c:66 +msgid "Suppress messages" +msgstr "Thu hồi thông điệp" + +#: e2fsck/problem.c:67 +msgid "Unlink" +msgstr "Bỏ liên kết" + +#: e2fsck/problem.c:68 +msgid "Clear HTree index" +msgstr "Xoá chỉ mục HCây" + +#: e2fsck/problem.c:69 +msgid "Recreate" +msgstr "Tạo lại" + +#: e2fsck/problem.c:78 +msgid "(NONE)" +msgstr "(KHÔNG CÓ)" + +#: e2fsck/problem.c:79 +msgid "FIXED" +msgstr "ĐÃ SỬA" + +#: e2fsck/problem.c:80 +msgid "CLEARED" +msgstr "ĐÃ XOÁ" + +#: e2fsck/problem.c:81 +msgid "RELOCATED" +msgstr "ĐÃ ĐỊNH VỊ LẠI" + +#: e2fsck/problem.c:82 +msgid "ALLOCATED" +msgstr "ĐÃ CẤP PHÁT" + +#: e2fsck/problem.c:83 +msgid "EXPANDED" +msgstr "ĐÃ MỞ RỘNG" + +#: e2fsck/problem.c:84 +msgid "RECONNECTED" +msgstr "ĐÃ KẾT NỐI LẠI" + +#: e2fsck/problem.c:85 +msgid "CREATED" +msgstr "ĐÃ TẠO" + +#: e2fsck/problem.c:86 +msgid "SALVAGED" +msgstr "ĐÃ CỨU VỚT" + +#: e2fsck/problem.c:87 +msgid "TRUNCATED" +msgstr "ĐÃ CẮT NGẮN" + +#: e2fsck/problem.c:88 +msgid "INODE CLEARED" +msgstr "NÚT INODE ĐÃ XOÁ" + +#: e2fsck/problem.c:89 +msgid "ABORTED" +msgstr "BỊ HỦY BỎ" + +#: e2fsck/problem.c:90 +msgid "SPLIT" +msgstr "ĐÃ CHIA RA" + +#: e2fsck/problem.c:91 +msgid "CONTINUING" +msgstr "ĐANG TIẾP TỤC" + +#: e2fsck/problem.c:92 +msgid "MULTIPLY-CLAIMED BLOCKS CLONED" +msgstr "CÁC KHỐI ĐÃ TUYÊN BỐ NHIỀU LẦN ĐÃ ĐƯỢC NHÁI THEO" + +#: e2fsck/problem.c:93 +msgid "FILE DELETED" +msgstr "TẬP TIN ĐÃ ĐƯỢC XÓA BỎ" + +#: e2fsck/problem.c:94 +msgid "SUPPRESSED" +msgstr "ĐÃ THU HỒI" + +#: e2fsck/problem.c:95 +msgid "UNLINKED" +msgstr "ĐÃ BỎ LIÊN KẾT" + +#: e2fsck/problem.c:96 +msgid "HTREE INDEX CLEARED" +msgstr "CHỈ MỤC HCÂY ĐÃ ĐƯỢC XOÁ" + +#: e2fsck/problem.c:97 +msgid "WILL RECREATE" +msgstr "SẼ TẠO LẠI" + +#. @-expanded: block bitmap for group %g is not in group. (block %b)\n +#: e2fsck/problem.c:106 +msgid "@b @B for @g %g is not in @g. (@b %b)\n" +msgstr "sơ đồ khối cho nhóm %g không phải nằm trong nhóm. (khối %b)\n" + +#. @-expanded: inode bitmap for group %g is not in group. (block %b)\n +#: e2fsck/problem.c:110 +msgid "@i @B for @g %g is not in @g. (@b %b)\n" +msgstr "sơ đồ nút inode cho nhóm %g không phải nằm trong nhóm. (khối %b)\n" + +#. @-expanded: inode table for group %g is not in group. (block %b)\n +#. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n +#: e2fsck/problem.c:115 +msgid "" +"@i table for @g %g is not in @g. (@b %b)\n" +"WARNING: SEVERE DATA LOSS POSSIBLE.\n" +msgstr "" +"bảng nút inode cho nhóm %g không phải nằm trong nhóm. (khối %b)\n" +"CẢNH BÁO : CÓ THỂ MẤT DỮ LIỆU NHIỀU.\n" + +#. @-expanded: \n +#. @-expanded: The superblock could not be read or does not describe a correct ext2\n +#. @-expanded: filesystem. If the device is valid and it really contains an ext2\n +#. @-expanded: filesystem (and not swap or ufs or something else), then the superblock\n +#. @-expanded: is corrupt, and you might try running e2fsck with an alternate superblock:\n +#. @-expanded: e2fsck -b %S \n +#. @-expanded: \n +#: e2fsck/problem.c:121 +#, c-format +msgid "" +"\n" +"The @S could not be read or does not describe a correct ext2\n" +"@f. If the @v is valid and it really contains an ext2\n" +"@f (and not swap or ufs or something else), then the @S\n" +"is corrupt, and you might try running e2fsck with an alternate @S:\n" +" e2fsck -b %S <@v>\n" +"\n" +msgstr "" +"\n" +"Siêu khối không thể được đọc, hoặc không diễn tả một hệ thống\n" +"tập tin kiểu ext2 đúng. Nếu thiết bị là hợp lệ và thật sự chứa\n" +"một hệ thống tập tin kiểu ext2 (không phải kiểu trao đổi hay UFS\n" +"hay kiểu khác), thì siêu khối bị hỏng, và đề nghị bạn thử chạy\n" +"e2fsck với một siêu khối xen kẽ:\n" +" e2fsck -b %S \n" +"\n" + +#. @-expanded: The filesystem size (according to the superblock) is %b blocks\n +#. @-expanded: The physical size of the device is %c blocks\n +#. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n +#: e2fsck/problem.c:130 +msgid "" +"The @f size (according to the @S) is %b @bs\n" +"The physical size of the @v is %c @bs\n" +"Either the @S or the partition table is likely to be corrupt!\n" +msgstr "" +"Kích cỡ của hệ thống tập tin (tùy theo siêu khối) là %b khối.\n" +"Kích cỡ vật lý của thiết bị là %c khối.\n" +"Hoặc siêu khối hoặc bảng phân vùng rất có thể bị hỏng !\n" + +#. @-expanded: superblock block_size = %b, fragsize = %c.\n +#. @-expanded: This version of e2fsck does not support fragment sizes different\n +#. @-expanded: from the block size.\n +#: e2fsck/problem.c:137 +msgid "" +"@S @b_size = %b, fragsize = %c.\n" +"This version of e2fsck does not support fragment sizes different\n" +"from the @b size.\n" +msgstr "" +"Kích cỡ của siêu khối là %b còn kích cỡ của đoạn là %c.\n" +"Phiên bản e2fsck này không hỗ trợ kích cỡ đoạn khác\n" +"với kích cỡ khối.\n" + +#. @-expanded: superblock blocks_per_group = %b, should have been %c\n +#: e2fsck/problem.c:144 +msgid "@S @bs_per_group = %b, should have been %c\n" +msgstr "Số khối trong mỗi nhóm siêu khối là %b, còn nên là %c.\n" + +#. @-expanded: superblock first_data_block = %b, should have been %c\n +#: e2fsck/problem.c:149 +msgid "@S first_data_@b = %b, should have been %c\n" +msgstr "Khối dữ liệu thứ nhất siêu khối là %b, còn nên là %c.\n" + +#. @-expanded: filesystem did not have a UUID; generating one.\n +#. @-expanded: \n +#: e2fsck/problem.c:154 +msgid "" +"@f did not have a UUID; generating one.\n" +"\n" +msgstr "" +"Hệ thống tập tin không có UUID nên đang tạo ra nó.\n" +"\n" + +#: e2fsck/problem.c:159 +#, c-format +msgid "" +"Note: if several inode or block bitmap blocks or part\n" +"of the inode table require relocation, you may wish to try\n" +"running e2fsck with the '-b %S' option first. The problem\n" +"may lie only with the primary block group descriptors, and\n" +"the backup block group descriptors may be OK.\n" +"\n" +msgstr "" +"Ghi chú : nếu vài khối nút inode hay khối sơ đồ bit khối\n" +"hay phần của bảng inode cần thiết được định vị lại,\n" +"có lẽ bạn muốn thử chạy e2fsck với tùy chọn « -b %S »\n" +"trước tiên. Vấn đề có thể nằm chỉ với các mô tả nhóm\n" +"khối chính, thì các mô tả nhóm khối dự trữ có thể là đúng.\n" +"\n" + +#. @-expanded: Corruption found in superblock. (%s = %N).\n +#: e2fsck/problem.c:168 +msgid "Corruption found in @S. (%s = %N).\n" +msgstr "Tìm điều bị hỏng trong siêu khối. (%s = %N).\n" + +#. @-expanded: Error determining size of the physical device: %m\n +#: e2fsck/problem.c:173 +#, c-format +msgid "Error determining size of the physical @v: %m\n" +msgstr "Gặp lỗi khi xác định kích cỡ của thiết bị vật lý: %m\n" + +#. @-expanded: inode count in superblock is %i, should be %j.\n +#: e2fsck/problem.c:178 +msgid "@i count in @S is %i, @s %j.\n" +msgstr "Số đếm nút inode trong siêu khối là %i, còn nên là %j.\n" + +#: e2fsck/problem.c:182 +msgid "The Hurd does not support the filetype feature.\n" +msgstr "Hurd không hỗ trợ tính năng kiểu tập tin.\n" + +#. @-expanded: superblock has an invalid ext3 journal (inode %i).\n +#: e2fsck/problem.c:187 +#, c-format +msgid "@S has an @n ext3 @j (@i %i).\n" +msgstr "Siêu khối có nhật ký ext3 không hợp lệ (inode %i).\n" + +#. @-expanded: External journal has multiple filesystem users (unsupported).\n +#: e2fsck/problem.c:192 +msgid "External @j has multiple @f users (unsupported).\n" +msgstr "Nhật ký bên ngoài có nhiều người dùng hệ thống tập tin (không được hỗ trợ).\n" + +#. @-expanded: Can't find external journal\n +#: e2fsck/problem.c:197 +msgid "Can't find external @j\n" +msgstr "Không tìm thấy nhật ký bên ngoài\n" + +#. @-expanded: External journal has bad superblock\n +#: e2fsck/problem.c:202 +msgid "External @j has bad @S\n" +msgstr "Nhật ký bên ngoài có siêu khối sai\n" + +#. @-expanded: External journal does not support this filesystem\n +#: e2fsck/problem.c:207 +msgid "External @j does not support this @f\n" +msgstr "Nhật ký bên ngoài không hỗ trợ hệ thống tập tin này\n" + +#. @-expanded: Ext3 journal superblock is unknown type %N (unsupported).\n +#. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal +#. @-expanded: format.\n +#. @-expanded: It is also possible the journal superblock is corrupt.\n +#: e2fsck/problem.c:212 +msgid "" +"Ext3 @j @S is unknown type %N (unsupported).\n" +"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n" +"It is also possible the @j @S is corrupt.\n" +msgstr "" +"Siêu khối nhật ký ext3 có kiểu không rõ %N (không được hỗ trợ).\n" +"Rất có thể là bản sao e2fsck của bạn là cũ và/hay không hỗ trợ\n" +"dạng thức nhật ký này.\n" +"Cũng có thể là siêu khối nhật ký bị hỏng.\n" + +#. @-expanded: Ext3 journal superblock is corrupt.\n +#: e2fsck/problem.c:220 +msgid "Ext3 @j @S is corrupt.\n" +msgstr "Siêu khối nhật ký ext3 bị hỏng.\n" + +#. @-expanded: superblock doesn't have has_journal flag, but has ext3 journal %s.\n +#: e2fsck/problem.c:225 +#, c-format +msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n" +msgstr "Siêu khối không có cờ « có nhật ký » (has_journal), còn có nhật ký ext3 %s.\n" + +#. @-expanded: superblock has ext3 needs_recovery flag set, but no journal.\n +#: e2fsck/problem.c:230 +msgid "@S has ext3 needs_recovery flag set, but no @j.\n" +msgstr "" +"Siêu khối có cờ cần thiết phục hồi (needs_recovery) được đặt,\n" +"còn không có nhật ký.\n" + +#. @-expanded: ext3 recovery flag is clear, but journal has data.\n +#: e2fsck/problem.c:235 +msgid "ext3 recovery flag is clear, but @j has data.\n" +msgstr "Cờ phục hồi ext3 là rõ, còn nhật ký có dữ liệu.\n" + +#. @-expanded: Clear journal +#: e2fsck/problem.c:240 +msgid "Clear @j" +msgstr "Xoá nhật ký" + +#. @-expanded: Run journal anyway +#: e2fsck/problem.c:245 +msgid "Run @j anyway" +msgstr "Vẫn còn chạy nhật ký" + +#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n +#: e2fsck/problem.c:250 +msgid "Recovery flag not set in backup @S, so running @j anyway.\n" +msgstr "Chưa đặt cờ phục hồi trong siêu khối dự trữ nên vẫn chạy nhật ký.\n" + +#. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n +#: e2fsck/problem.c:255 +msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n" +msgstr "%s nút inode côi cút %i (uid=%Iu, gid=%Ig, chế độ=%Im, cỡ=%Is)\n" + +#. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n +#: e2fsck/problem.c:260 +msgid "@I @b #%B (%b) found in @o @i %i.\n" +msgstr "Tìm thấy khối cấm #%B (%b) trong nút inode côi cút %i.\n" + +#. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n +#: e2fsck/problem.c:265 +msgid "Already cleared @b #%B (%b) found in @o @i %i.\n" +msgstr "Đã xoá khối #%B (%b) được tìm trong nút inode côi cút %i.\n" + +#. @-expanded: illegal orphaned inode %i in superblock.\n +#: e2fsck/problem.c:270 +#, c-format +msgid "@I @o @i %i in @S.\n" +msgstr "Có nút inode côi cút cấm %i trong siêu khối.\n" + +#. @-expanded: illegal inode %i in orphaned inode list.\n +#: e2fsck/problem.c:275 +#, c-format +msgid "@I @i %i in @o @i list.\n" +msgstr "Có nút inode cấm %i trong danh sách inode côi cút.\n" + +#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem. +#: e2fsck/problem.c:280 e2fsck/problem.c:608 +msgid "@f has feature flag(s) set, but is a revision 0 @f. " +msgstr "Hệ thống tập tin đã đặt (các) cờ tính năng, còn là hệ thống bản sửa đổi 0. " + +#. @-expanded: Ext3 journal superblock has an unknown read-only feature flag set.\n +#: e2fsck/problem.c:285 +msgid "Ext3 @j @S has an unknown read-only feature flag set.\n" +msgstr "Siêu khối nhật ký ext3 đã đặt một cờ tính năng chỉ đọc không rõ.\n" + +#. @-expanded: Ext3 journal superblock has an unknown incompatible feature flag set.\n +#: e2fsck/problem.c:290 +msgid "Ext3 @j @S has an unknown incompatible feature flag set.\n" +msgstr "Siêu khối nhật ký ext3 đã đặt một cờ tính năng không tương thích không rõ.\n" + +#. @-expanded: journal version not supported by this e2fsck.\n +#: e2fsck/problem.c:295 +msgid "@j version not supported by this e2fsck.\n" +msgstr "Phiên bản nhật ký không được hỗ trợ bởi e2fsck này.\n" + +#. @-expanded: Moving journal from /%s to hidden inode.\n +#. @-expanded: \n +#: e2fsck/problem.c:300 +#, c-format +msgid "" +"Moving @j from /%s to hidden @i.\n" +"\n" +msgstr "" +"Đang di chuyển nhật ký từ sang nút inode bị ẩn.\n" +"\n" + +#. @-expanded: Error moving journal: %m\n +#. @-expanded: \n +#: e2fsck/problem.c:305 +#, c-format +msgid "" +"Error moving @j: %m\n" +"\n" +msgstr "" +"Gặp lỗi khi di chuyển nhật ký: %m\n" +"\n" + +#. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n +#. @-expanded: Clearing fields beyond the V1 journal superblock...\n +#. @-expanded: \n +#: e2fsck/problem.c:310 +msgid "" +"Found @n V2 @j @S fields (from V1 @j).\n" +"Clearing fields beyond the V1 @j @S...\n" +"\n" +msgstr "" +"Tìm thấy trường siêu khối nhật ký V2 (từ nhật ký V1).\n" +"Đang xoá các trường nằm ở bên kia siêu khối nhật ký V1...\n" +"\n" + +#. @-expanded: Backing up journal inode block information.\n +#. @-expanded: \n +#: e2fsck/problem.c:316 +msgid "" +"Backing up @j @i @b information.\n" +"\n" +msgstr "" +"Đang sao lưu thông tin khối nút inode nhật ký.\n" +"\n" + +#. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n +#. @-expanded: is %N; should be zero. +#: e2fsck/problem.c:321 +msgid "" +"@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n" +"is %N; @s zero. " +msgstr "" +"Hệ thống tập tin chưa hiệu lực khả năng thay đổi kích cỡ\n" +"của nút inode (resize_inode), nhưng số khối GDT đã dành\n" +"riêng s (s_reserved_gdt_blocks) là %N, còn nên là số không." + +#. @-expanded: Resize_inode not enabled, but the resize inode is non-zero. +#: e2fsck/problem.c:327 +msgid "Resize_@i not enabled, but the resize @i is non-zero. " +msgstr "" +"Chưa hiệu lực khả năng thay đổi kích cỡ của nút inode (Resize_inode)\n" +"còn nút inode thay đổi kích cỡ khác không. " + +#. @-expanded: Resize inode not valid. +#: e2fsck/problem.c:332 +msgid "Resize @i not valid. " +msgstr "Nút inode thay đổi kích cỡ không hợp lệ. " + +#. @-expanded: superblock last mount time is in the future. +#: e2fsck/problem.c:337 +msgid "@S last mount time is in the future. " +msgstr "Giờ đã gắn kết siêu khối cuối cùng nằm trong tương lai. " + +#. @-expanded: superblock last write time is in the future. +#: e2fsck/problem.c:342 +msgid "@S last write time is in the future. " +msgstr "Giờ đã ghi siêu khối cuối cùng nằm trong tương lai. " + +#. @-expanded: superblock hint for external superblock should be %X. +#: e2fsck/problem.c:346 +#, c-format +msgid "@S hint for external superblock @s %X. " +msgstr "Mẹo siêu khối cho siêu khối bên ngoài nên là %X. " + +#. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n +#: e2fsck/problem.c:353 +msgid "Pass 1: Checking @is, @bs, and sizes\n" +msgstr "Lần qua 1: đang kiểm tra các nút inode, khối và kích cỡ\n" + +#. @-expanded: root inode is not a directory. +#: e2fsck/problem.c:357 +msgid "@r is not a @d. " +msgstr "Nút inode gốc không phải là thư mục. " + +#. @-expanded: root inode has dtime set (probably due to old mke2fs). +#: e2fsck/problem.c:362 +msgid "@r has dtime set (probably due to old mke2fs). " +msgstr "Nút inode gốc đã đặt dtime (rất có thể do mkd2fs cũ). " + +#. @-expanded: Reserved inode %i (%Q) has invalid mode. +#: e2fsck/problem.c:367 +msgid "Reserved @i %i (%Q) has @n mode. " +msgstr "Nút inode đã dành riêng %i (%Q) có chế độ không hợp lệ. " + +#. @-expanded: deleted inode %i has zero dtime. +#: e2fsck/problem.c:372 +#, c-format +msgid "@D @i %i has zero dtime. " +msgstr "Nút inode đã xoá bỏ %i có dtime bằng không. " + +#. @-expanded: inode %i is in use, but has dtime set. +#: e2fsck/problem.c:377 +#, c-format +msgid "@i %i is in use, but has dtime set. " +msgstr "Nút inode %i đang được dùng, còn đã đặt dtime. " + +#. @-expanded: inode %i is a zero-length directory. +#: e2fsck/problem.c:382 +#, c-format +msgid "@i %i is a @z @d. " +msgstr "Nút inode %i là thư mục có độ dài bằng không. " + +#. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n +#: e2fsck/problem.c:387 +msgid "@g %g's @b @B at %b @C.\n" +msgstr "Sơ đồ bit khối của nhóm %g tại %b xung đột với khối hệ thống tập tin khác.\n" + +#. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n +#: e2fsck/problem.c:392 +msgid "@g %g's @i @B at %b @C.\n" +msgstr "" +"Sơ đồ bit nút inode của nhóm %g tại %b xung đột\n" +"với khối hệ thống tập tin khác.\n" + +#. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n +#: e2fsck/problem.c:397 +msgid "@g %g's @i table at %b @C.\n" +msgstr "Bảng nút inode của nhóm %g tại %b xung đột với khối hệ thống tập tin khác.\n" + +#. @-expanded: group %g's block bitmap (%b) is bad. +#: e2fsck/problem.c:402 +msgid "@g %g's @b @B (%b) is bad. " +msgstr "Sơ đồ bit khối của nhóm %g (%b) là sai. " + +#. @-expanded: group %g's inode bitmap (%b) is bad. +#: e2fsck/problem.c:407 +msgid "@g %g's @i @B (%b) is bad. " +msgstr "Sơ đồ bit nút inode của nhóm %g (%b) là sai. " + +#. @-expanded: inode %i, i_size is %Is, should be %N. +#: e2fsck/problem.c:412 +msgid "@i %i, i_size is %Is, @s %N. " +msgstr "Nút inode %i, kích cỡ i_size là %Is, còn nên là %N. " + +#. @-expanded: inode %i, i_blocks is %Ib, should be %N. +#: e2fsck/problem.c:417 +msgid "@i %i, i_@bs is %Ib, @s %N. " +msgstr "Nút inode %i, khối i_blocks là %Ib, còn nên là %N. " + +#. @-expanded: illegal block #%B (%b) in inode %i. +#: e2fsck/problem.c:422 +msgid "@I @b #%B (%b) in @i %i. " +msgstr "Khối cấm số %B (%b) nằm trong nút inode %i. " + +#. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i. +#: e2fsck/problem.c:427 +msgid "@b #%B (%b) overlaps @f metadata in @i %i. " +msgstr "Khối số %B (%b) đè lên siêu dữ liệu hệ thống tập tin trong nút inode %i. " + +#. @-expanded: inode %i has illegal block(s). +#: e2fsck/problem.c:432 +#, c-format +msgid "@i %i has illegal @b(s). " +msgstr "Nút inode %i có khối cấm. " + +#. @-expanded: Too many illegal blocks in inode %i.\n +#: e2fsck/problem.c:437 +#, c-format +msgid "Too many illegal @bs in @i %i.\n" +msgstr "Có quá nhiều khối cấm trong nút inode %i.\n" + +#. @-expanded: illegal block #%B (%b) in bad block inode. +#: e2fsck/problem.c:442 +msgid "@I @b #%B (%b) in bad @b @i. " +msgstr "Có khối cấm số %B (%b) trong nút inode khối hỏng. " + +#. @-expanded: Bad block inode has illegal block(s). +#: e2fsck/problem.c:447 +msgid "Bad @b @i has illegal @b(s). " +msgstr "Nút inode khối hỏng có khối cấm. " + +#. @-expanded: Duplicate or bad block in use!\n +#: e2fsck/problem.c:452 +msgid "Duplicate or bad @b in use!\n" +msgstr "Đang dùng khối trùng hay bị hỏng !\n" + +#. @-expanded: Bad block %b used as bad block inode indirect block. +#: e2fsck/problem.c:457 +msgid "Bad @b %b used as bad @b @i indirect @b. " +msgstr "Khối hỏng %b được dùng là khối gián tiếp nút inode khối hỏng. " + +#. @-expanded: \n +#. @-expanded: The bad block inode has probably been corrupted. You probably\n +#. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n +#. @-expanded: in the filesystem.\n +#: e2fsck/problem.c:462 +msgid "" +"\n" +"The bad @b @i has probably been corrupted. You probably\n" +"should stop now and run e2fsck -c to scan for bad blocks\n" +"in the @f.\n" +msgstr "" +"\n" +"Nút inode khối sai rất có thể bị hỏng. Đề nghị bạn dừng\n" +"ngay bây giờ và chạy lệnh « e2fsck -c » để quét tìm khối hỏng\n" +"trong hệ thống tập tin đó.\n" + +#. @-expanded: \n +#. @-expanded: If the block is really bad, the filesystem can not be fixed.\n +#: e2fsck/problem.c:469 +msgid "" +"\n" +"If the @b is really bad, the @f can not be fixed.\n" +msgstr "" +"\n" +"Nếu khối thật sự bị hỏng, không thể sửa chữa hệ thống tập tin đó.\n" + +#. @-expanded: You can remove this block from the bad block list and hope\n +#. @-expanded: that the block is really OK. But there are no guarantees.\n +#. @-expanded: \n +#: e2fsck/problem.c:474 +msgid "" +"You can remove this @b from the bad @b list and hope\n" +"that the @b is really OK. But there are no guarantees.\n" +"\n" +msgstr "" +"Bạn có thể gỡ bỏ khối này khỏi danh sách các khối hỏng\n" +"và mong khối đó thật sự là đúng. Tuy nhiên không bảo đảm gì.\n" +"\n" + +#. @-expanded: The primary superblock (%b) is on the bad block list.\n +#: e2fsck/problem.c:480 +msgid "The primary @S (%b) is on the bad @b list.\n" +msgstr "Siêu khối chính (%b) nằm trong danh sách các khối hỏng.\n" + +#. @-expanded: Block %b in the primary group descriptors is on the bad block list\n +#: e2fsck/problem.c:485 +msgid "Block %b in the primary @g descriptors is on the bad @b list\n" +msgstr "Khối %b trong những mô tả nhóm chính có nằm trong danh sách các khối hỏng !\n" + +#. @-expanded: Warning: Group %g's superblock (%b) is bad.\n +#: e2fsck/problem.c:491 +msgid "Warning: Group %g's @S (%b) is bad.\n" +msgstr "Cảnh báo : siêu khối của nhóm %g (%b) bị hỏng.\n" + +#. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n +#: e2fsck/problem.c:496 +msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n" +msgstr "Cảnh báo : bản sao các mô tả nhóm của nhóm %g có một khối hỏng (%b).\n" + +#. @-expanded: Programming error? block #%b claimed for no reason in process_bad_block.\n +#: e2fsck/problem.c:502 +msgid "Programming error? @b #%b claimed for no reason in process_bad_@b.\n" +msgstr "" +"Lỗi lập trình ? Khối %b được tuyên bố, không có lý do,\n" +"trong việc xử lý khối hỏng (process_bad_block).\n" + +#. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n +#: e2fsck/problem.c:508 +msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n" +msgstr "Gặp lỗi khi cấp phát %N khối kề nhau trong nhóm khối %g cho %s: %m\n" + +#. @-expanded: error allocating block buffer for relocating %s\n +#: e2fsck/problem.c:513 +#, c-format +msgid "@A @b buffer for relocating %s\n" +msgstr "Gặp lỗi khi cấp phát bộ đệm khối để định vị lại %s\n" + +#. @-expanded: Relocating group %g's %s from %b to %c...\n +#: e2fsck/problem.c:518 +msgid "Relocating @g %g's %s from %b to %c...\n" +msgstr "Đang định vị lại %s của nhóm %g từ %b sang %c...\n" + +#. @-expanded: Relocating group %g's %s to %c...\n +#: e2fsck/problem.c:523 +#, c-format +msgid "Relocating @g %g's %s to %c...\n" +msgstr "Đang định vị lại %2$s của nhóm %1$g sang %3$c...\n" + +#. @-expanded: Warning: could not read block %b of %s: %m\n +#: e2fsck/problem.c:528 +msgid "Warning: could not read @b %b of %s: %m\n" +msgstr "Cảnh báo : không thể đọc khối %b trên %s: %m\n" + +#. @-expanded: Warning: could not write block %b for %s: %m\n +#: e2fsck/problem.c:533 +msgid "Warning: could not write @b %b for %s: %m\n" +msgstr "Cảnh báo : không thể ghi khối %b cho %s: %m\n" + +#. @-expanded: error allocating inode bitmap (%N): %m\n +#: e2fsck/problem.c:538 e2fsck/problem.c:1265 +msgid "@A @i @B (%N): %m\n" +msgstr "Gặp lỗi khi cấp phát sơ đồ bit nút inode (%N): %m\n" + +#. @-expanded: error allocating block bitmap (%N): %m\n +#: e2fsck/problem.c:543 +msgid "@A @b @B (%N): %m\n" +msgstr "Gặp lỗi khi cấp phát sơ đồ bit khối (%N): %m\n" + +#. @-expanded: error allocating icount link information: %m\n +#: e2fsck/problem.c:548 +#, c-format +msgid "@A icount link information: %m\n" +msgstr "Gặp lỗi khi cấp phát thông tin liên kết đếm icount: %m\n" + +#. @-expanded: error allocating directory block array: %m\n +#: e2fsck/problem.c:553 +#, c-format +msgid "@A @d @b array: %m\n" +msgstr "Gặp lỗi khi cấp phát mảng khối thư mục: %m\n" + +#. @-expanded: Error while scanning inodes (%i): %m\n +#: e2fsck/problem.c:558 +#, c-format +msgid "Error while scanning @is (%i): %m\n" +msgstr "Gặp lỗi khi quét các nút inode (%i): %m\n" + +#. @-expanded: Error while iterating over blocks in inode %i: %m\n +#: e2fsck/problem.c:563 +#, c-format +msgid "Error while iterating over @bs in @i %i: %m\n" +msgstr "Gặp lỗi khi lặp lại trên các khối trong nút inode %i: %m\n" + +#. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n +#: e2fsck/problem.c:568 +msgid "Error storing @i count information (@i=%i, count=%N): %m\n" +msgstr "Gặp lỗi khi cất giữ thông tin đếm nút inode (inode=%i, tổng=%N): %m\n" + +#. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n +#: e2fsck/problem.c:573 +msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n" +msgstr "Gặp lỗi khi cất giữ thông tin khối thư mục (inode=%i, khối=%b, số=%N): %m\n" + +#. @-expanded: Error reading inode %i: %m\n +#: e2fsck/problem.c:579 +#, c-format +msgid "Error reading @i %i: %m\n" +msgstr "Gặp lỗi khi đọc nút inode %i: %m\n" + +#. @-expanded: inode %i has imagic flag set. +#: e2fsck/problem.c:587 +#, c-format +msgid "@i %i has imagic flag set. " +msgstr "Nút inode %i đã đặt cờ ma thuật imagic. " + +#. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n +#. @-expanded: or append-only flag set. +#: e2fsck/problem.c:592 +#, c-format +msgid "" +"Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n" +"or append-only flag set. " +msgstr "" +"Tập tin (thiết bị/ổ cắm/FIFO/liên kết tượng trưng) đặc biệt\n" +"(nút inode %i) đã đặt cờ không thay đổi (immutable) hay\n" +"chỉ phu thêm (append-only)." + +#. @-expanded: inode %i has compression flag set on filesystem without compression support. +#: e2fsck/problem.c:598 +#, c-format +msgid "@i %i has @cion flag set on @f without @cion support. " +msgstr "" +"Nút inode %i đã đặt cờ nén trên hệ thống tập tin,\n" +"mà không hỗ trợ khả năng nén. " + +#. @-expanded: Special (device/socket/fifo) inode %i has non-zero size. +#: e2fsck/problem.c:603 +#, c-format +msgid "Special (@v/socket/fifo) @i %i has non-zero size. " +msgstr "Nút inode (thiết bị/ổ cắm/FIFO) đặc biệt %i có kích cỡ khác không. " + +#. @-expanded: journal inode is not in use, but contains data. +#: e2fsck/problem.c:613 +msgid "@j @i is not in use, but contains data. " +msgstr "Nút inode nhật ký không đang được dùng, còn chứa dữ liệu. " + +#. @-expanded: journal is not regular file. +#: e2fsck/problem.c:618 +msgid "@j is not regular file. " +msgstr "Nhật ký không phải là tập tin chuẩn. " + +#. @-expanded: inode %i was part of the orphaned inode list. +#: e2fsck/problem.c:623 +#, c-format +msgid "@i %i was part of the @o @i list. " +msgstr "Nút inode %i đã là phần danh sách các nút inode côì cút. " + +#. @-expanded: inodes that were part of a corrupted orphan linked list found. +#: e2fsck/problem.c:629 +msgid "@is that were part of a corrupted orphan linked list found. " +msgstr "" +"các nút inode đã là phần của danh sách mồ côi đã liên kết bị hỏng\n" +"đã được tìm. " + +#. @-expanded: error allocating refcount structure (%N): %m\n +#: e2fsck/problem.c:634 +msgid "@A refcount structure (%N): %m\n" +msgstr "Gặp lỗi khi cấp phát cấu trúc số đếm tham chiếu (%N): %m\n" + +#. @-expanded: Error reading extended attribute block %b for inode %i. +#: e2fsck/problem.c:639 +msgid "Error reading @a @b %b for @i %i. " +msgstr "Gặp lỗi khi đọc khối thuộc tính đã mở rộng %b cho nút inode %i. " + +#. @-expanded: inode %i has a bad extended attribute block %b. +#: e2fsck/problem.c:644 +msgid "@i %i has a bad @a @b %b. " +msgstr "Nút inode %i có khối thuộc tính đã mở rộng hỏng %b. " + +#. @-expanded: Error reading extended attribute block %b (%m). +#: e2fsck/problem.c:649 +msgid "Error reading @a @b %b (%m). " +msgstr "Gặp lỗi khi đọc khối thuộc tính đã mở rộng %b (%m). " + +#. @-expanded: extended attribute block %b has reference count %B, should be %N. +#: e2fsck/problem.c:654 +msgid "@a @b %b has reference count %B, @s %N. " +msgstr "Khối thuộc tính đã mở rộng %b có số đếm tham chiếu %B, còn nên là %N. " + +#. @-expanded: Error writing extended attribute block %b (%m). +#: e2fsck/problem.c:659 +msgid "Error writing @a @b %b (%m). " +msgstr "Gặp lỗi khi ghi khối thuộc tính %b (%m). " + +#. @-expanded: extended attribute block %b has h_blocks > 1. +#: e2fsck/problem.c:664 +msgid "@a @b %b has h_@bs > 1. " +msgstr "Khối thuộc tính đã mở rộng %b có khối h_blocks > 1. " + +#. @-expanded: error allocating extended attribute block %b. +#: e2fsck/problem.c:669 +msgid "@A @a @b %b. " +msgstr "Gặp lỗi khi cấp phát khối thuộc tính đã mở rộng %b. " + +#. @-expanded: extended attribute block %b is corrupt (allocation collision). +#: e2fsck/problem.c:674 +msgid "@a @b %b is corrupt (allocation collision). " +msgstr "Khối thuộc tính đã mở rộng %b bị hỏng (sự xung đột cấp phát). " + +#. @-expanded: extended attribute block %b is corrupt (invalid name). +#: e2fsck/problem.c:679 +msgid "@a @b %b is corrupt (@n name). " +msgstr "Khối thuộc tính đã mở rộng %b bị hỏng (tên không hợp lệ). " + +#. @-expanded: extended attribute block %b is corrupt (invalid value). +#: e2fsck/problem.c:684 +msgid "@a @b %b is corrupt (@n value). " +msgstr "Khối thuộc tính đã mở rộng %b bị hỏng ( giá trị không hợp lệ). " + +#. @-expanded: inode %i is too big. +#: e2fsck/problem.c:689 +#, c-format +msgid "@i %i is too big. " +msgstr "Nút inode %i là quá lớn. " + +#. @-expanded: block #%B (%b) causes directory to be too big. +#: e2fsck/problem.c:693 +msgid "@b #%B (%b) causes @d to be too big. " +msgstr "Khối số %B (%b) gây ra thư mục là quá lớn. " + +#. @-expanded: block #%B (%b) causes file to be too big. +#: e2fsck/problem.c:698 +msgid "@b #%B (%b) causes file to be too big. " +msgstr "Khối số %B (%b) gây ra tập tin là quá lớn. " + +#. @-expanded: block #%B (%b) causes symlink to be too big. +#: e2fsck/problem.c:703 +msgid "@b #%B (%b) causes symlink to be too big. " +msgstr "Khối số %B (%b) gây ra liên kết tượng trưng là quá lớn. " + +#. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n +#: e2fsck/problem.c:708 +#, c-format +msgid "@i %i has INDEX_FL flag set on @f without htree support.\n" +msgstr "" +"Nút inode %i đã đặt cờ chỉ mục INDEX_FL trên hệ thống tập tin\n" +"không hỗ trợ HCÂY.\n" + +#. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n +#: e2fsck/problem.c:713 +#, c-format +msgid "@i %i has INDEX_FL flag set but is not a @d.\n" +msgstr "Nút inode %i đã đặt cờ chỉ mục INDEX_FL nhưng không phải là thư mục.\n" + +#. @-expanded: HTREE directory inode %i has an invalid root node.\n +#: e2fsck/problem.c:718 +#, c-format +msgid "@h %i has an @n root node.\n" +msgstr "Nút inode thư mục HCÂY %i có nút gốc không hợp lệ.\n" + +#. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n +#: e2fsck/problem.c:723 +msgid "@h %i has an unsupported hash version (%N)\n" +msgstr "Nút inode thư mục HCÂY %i có phiên bản băm không được hỗ trợ (%N)\n" + +#. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n +#: e2fsck/problem.c:728 +#, c-format +msgid "@h %i uses an incompatible htree root node flag.\n" +msgstr "Nút inode thư mục HCÂY %i dùng một cờ nút gốc HCÂY không tương thích.\n" + +#. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n +#: e2fsck/problem.c:733 +msgid "@h %i has a tree depth (%N) which is too big\n" +msgstr "Nút inode thư mục HCÂY %i có độ sâu cây (%N) là quá lớn.\n" + +#. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n +#. @-expanded: filesystem metadata. +#: e2fsck/problem.c:738 +msgid "" +"Bad @b @i has an indirect @b (%b) that conflicts with\n" +"@f metadata. " +msgstr "" +"Nút inode khối hỏng có một khối gián tiếp (%b) xung đột\n" +"với siêu dữ liệu về hệ thống tập tin." + +#. @-expanded: Resize inode (re)creation failed: %m. +#: e2fsck/problem.c:744 +#, c-format +msgid "Resize @i (re)creation failed: %m." +msgstr "Việc tạo (lại) nút inode thay đổi kích cỡ bị lỗi: %m" + +#. @-expanded: inode %i has a extra size (%IS) which is invalid\n +#: e2fsck/problem.c:749 +msgid "@i %i has a extra size (%IS) which is @n\n" +msgstr "Nút inode %i có kích cỡ thêm (%IS) là không hợp lệ.\n" + +#. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n +#: e2fsck/problem.c:754 +msgid "@a in @i %i has a namelen (%N) which is @n\n" +msgstr "" +"Thuộc tính đã mở rộng trong nút inode %i có độ dài tên (namelen) (%N)\n" +"không hợp lệ.\n" + +#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n +#: e2fsck/problem.c:759 +msgid "@a in @i %i has a value size (%N) which is @n\n" +msgstr "" +"Thuộc tính đã mở rộng trong nút inode %i có kích cỡ giá trị (%N)\n" +"không hợp lệ.\n" + +#. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n +#: e2fsck/problem.c:764 +msgid "@a in @i %i has a value offset (%N) which is @n\n" +msgstr "" +"Thuộc tính đã mở rộng trong nút inode %i có hiệu số giá trị (%N)\n" +"không hợp lệ.\n" + +#. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n +#: e2fsck/problem.c:769 +msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n" +msgstr "" +"Thuộc tính đã mở rộng trong nút inode %i có khối giá trị (%N)\n" +"không hợp lệ (phải là 0).\n" + +#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid (must be 0)\n +#: e2fsck/problem.c:774 +msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n" +msgstr "" +"Thuộc tính đã mở rộng trong nút inode %i có băm (%N)\n" +"là không hợp lệ (phải là 0).\n" + +#. @-expanded: \n +#. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n +#. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n +#: e2fsck/problem.c:781 +msgid "" +"\n" +"Running additional passes to resolve @bs claimed by more than one @i...\n" +"Pass 1B: Rescanning for @m @bs\n" +msgstr "" +"\n" +"Đạng chạy một số lần qua thêm để tháo gỡ các khối đã được tuyên bố\n" +"bởi nhiều nút inode...\n" +"Lần qua 1B: đang quét lại tìm khối đã được tuyên bố nhiều lần.\n" + +#. @-expanded: multiply-claimed block(s) in inode %i: +#: e2fsck/problem.c:787 +#, c-format +msgid "@m @b(s) in @i %i:" +msgstr "khối đã được tuyên bố nhiều lần trong nút inode %i:" + +#: e2fsck/problem.c:802 +#, c-format +msgid "Error while scanning inodes (%i): %m\n" +msgstr "Gặp lỗi khi quét các nút inode (%i): %m\n" + +#. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n +#: e2fsck/problem.c:807 +#, c-format +msgid "@A @i @B (@i_dup_map): %m\n" +msgstr "Gặp lỗi khi cấp phát sơ đồ bit inode (inode_dup_map): %m\n" + +#. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n +#: e2fsck/problem.c:812 +#, c-format +msgid "Error while iterating over @bs in @i %i (%s): %m\n" +msgstr "Gặp lỗi khi lặp lại trên các khối trong nút inode %i (%s): %m\n" + +#. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n +#: e2fsck/problem.c:817 e2fsck/problem.c:1133 +msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n" +msgstr "" +"Gặp lỗi khi điều chỉnh số đếm tham chiếu cho khối thuộc tính đã mở rộng %b\n" +"(inode %i): %m\n" + +#. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n +#: e2fsck/problem.c:823 +msgid "Pass 1C: Scanning directories for @is with @m @bs\n" +msgstr "" +"Lần qua 1C: đang quét các thư mục tìm nút inode có khối đã được tuyên bố\n" +"nhiều lần\n" + +#. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n +#: e2fsck/problem.c:829 +msgid "Pass 1D: Reconciling @m @bs\n" +msgstr "Lần qua 1D: đang điều hoà các khối đã được tuyên bố nhiều lần\n" + +#. @-expanded: File %Q (inode #%i, mod time %IM) \n +#. @-expanded: has %B multiply-claimed block(s), shared with %N file(s):\n +#: e2fsck/problem.c:834 +msgid "" +"File %Q (@i #%i, mod time %IM) \n" +" has %B @m @b(s), shared with %N file(s):\n" +msgstr "" +"Tập tin %Q (nút inode số %i, giờ sửa đổi %IM) \n" +"có %B khối đã được tuyên bố nhiều lần, được chia ra %N tập tin:\n" + +#. @-expanded: \t%Q (inode #%i, mod time %IM)\n +#: e2fsck/problem.c:840 +msgid "\t%Q (@i #%i, mod time %IM)\n" +msgstr "\t%Q (nút inode #%i, giờ sửa đổi %IM)\n" + +#. @-expanded: \t\n +#: e2fsck/problem.c:845 +msgid "\t<@f metadata>\n" +msgstr "\t\n" + +#. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n +#. @-expanded: \n +#: e2fsck/problem.c:850 +msgid "" +"(There are %N @is containing @m @bs.)\n" +"\n" +msgstr "" +"(Có %N nút inode chứa khối đã được tuyên bố nhiều lần.)\n" +"\n" + +#. @-expanded: multiply-claimed blocks already reassigned or cloned.\n +#. @-expanded: \n +#: e2fsck/problem.c:855 +msgid "" +"@m @bs already reassigned or cloned.\n" +"\n" +msgstr "" +"Các khối đã được tuyên bố nhiều lần đã được cấp phát lại\n" +"hay được nhái theo.\n" +"\n" + +#: e2fsck/problem.c:868 +#, c-format +msgid "Couldn't clone file: %m\n" +msgstr "Không thể nhái theo tập tin: %m\n" + +#. @-expanded: Pass 2: Checking directory structure\n +#: e2fsck/problem.c:874 +msgid "Pass 2: Checking @d structure\n" +msgstr "Lần qua 2: đang kiểm tra cấu trúc thư mục\n" + +#. @-expanded: invalid inode number for '.' in directory inode %i.\n +#: e2fsck/problem.c:879 +#, c-format +msgid "@n @i number for '.' in @d @i %i.\n" +msgstr "Số nút inode không hợp lệ cho « . » trong nút inode thư mục %i.\n" + +#. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n +#: e2fsck/problem.c:884 +msgid "@E has @n @i #: %Di.\n" +msgstr "Mục nhập « %Dn » trong %p (%i) có số hiệu nút inode không hợp lệ: %Di.\n" + +#. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di. +#: e2fsck/problem.c:889 +msgid "@E has @D/unused @i %Di. " +msgstr "Mục nhập « %Dn » trong %p (%i) có nút inode bị xoá bỏ/không được dùng %Di. " + +#. @-expanded: entry '%Dn' in %p (%i) is a link to '.' +#: e2fsck/problem.c:894 +msgid "@E @L to '.' " +msgstr "Mục nhập « %Dn » trong %p (%i) là liên kết đến « . » " + +#. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n +#: e2fsck/problem.c:899 +msgid "@E points to @i (%Di) located in a bad @b.\n" +msgstr "Mục nhập « %Dn » trong %p (%i) chỉ tới nút inode (%Di) nằm trong khối hỏng.\n" + +#. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n +#: e2fsck/problem.c:904 +msgid "@E @L to @d %P (%Di).\n" +msgstr "Mục nhập « %Dn » trong %p (%i) là liên kết đến thư mục %P (%Di).\n" + +#. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n +#: e2fsck/problem.c:909 +msgid "@E @L to the @r.\n" +msgstr "Mục nhập « %Dn » trong %p (%i) là liên kết đến nút inode gốc.\n" + +#. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n +#: e2fsck/problem.c:914 +msgid "@E has illegal characters in its name.\n" +msgstr "Mục nhập « %Dn » trong %p (%i) có tên chứa ký tự cấm.\n" + +#. @-expanded: Missing '.' in directory inode %i.\n +#: e2fsck/problem.c:919 +#, c-format +msgid "Missing '.' in @d @i %i.\n" +msgstr "Còn thiếu « . » trong nút inode thư mục %i.\n" + +#. @-expanded: Missing '..' in directory inode %i.\n +#: e2fsck/problem.c:924 +#, c-format +msgid "Missing '..' in @d @i %i.\n" +msgstr "Còn thiếu « .. » trong nút inode thư mục %i.\n" + +#. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n +#: e2fsck/problem.c:929 +msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n" +msgstr "" +"Mục nhập thứ nhất « %Dn » (nút inode=%Di) trong nút inode thư mục %i (%p)\n" +"nên là « . ».\n" + +#. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n +#: e2fsck/problem.c:934 +msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n" +msgstr "" +"Mục nhập thứ hai « %Dn » (nút inode=%Di) trong nút inode thư mục %i (%p)\n" +"nên là « .. ».\n" + +#. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n +#: e2fsck/problem.c:939 +msgid "i_faddr @F %IF, @s zero.\n" +msgstr "Địa chỉ i_faddr cho nút injode %i (%Q) là %IF, còn nên là số không.\n" + +#. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n +#: e2fsck/problem.c:944 +msgid "i_file_acl @F %If, @s zero.\n" +msgstr "i_file_acl cho nút inode %i (%Q) là %IF, còn nên là số không.\n" + +#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n +#: e2fsck/problem.c:949 +msgid "i_dir_acl @F %Id, @s zero.\n" +msgstr "i_dir_acl cho nút inode %i (%Q) là %Id, còn nên là số không.\n" + +#. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n +#: e2fsck/problem.c:954 +msgid "i_frag @F %N, @s zero.\n" +msgstr "Đoạn i_frag cho nút inode %i (%Q) là %Id, còn nên là số không.\n" + +#. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n +#: e2fsck/problem.c:959 +msgid "i_fsize @F %N, @s zero.\n" +msgstr "Kích cỡ i_fsize cho nút inode %i (%Q) là %Id, còn nên là số không.\n" + +#. @-expanded: inode %i (%Q) has invalid mode (%Im).\n +#: e2fsck/problem.c:964 +msgid "@i %i (%Q) has @n mode (%Im).\n" +msgstr "Nút inode %i (%Q) có chế độ không hợp lệ (%Im).\n" + +#. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n +#: e2fsck/problem.c:969 +msgid "@d @i %i, @b %B, offset %N: @d corrupted\n" +msgstr "Nút inode thư mục %i, khối %B, hiệu %N: thư mục bị hỏng\n" + +#. @-expanded: directory inode %i, block %B, offset %N: filename too long\n +#: e2fsck/problem.c:974 +msgid "@d @i %i, @b %B, offset %N: filename too long\n" +msgstr "Nút inode thư mục %i, khối %B, hiệu %N: tên tập tin quá dài\n" + +#. @-expanded: directory inode %i has an unallocated block #%B. +#: e2fsck/problem.c:979 +msgid "@d @i %i has an unallocated @b #%B. " +msgstr "Nút inode thư mục %i có một khối chưa cấp phát số %B. " + +#. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n +#: e2fsck/problem.c:984 +#, c-format +msgid "'.' @d @e in @d @i %i is not NULL terminated\n" +msgstr "Mục nhập thư mục « . » trong nút inode thư mục %i không được chấm dứt RỖNG.\n" + +#. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n +#: e2fsck/problem.c:989 +#, c-format +msgid "'..' @d @e in @d @i %i is not NULL terminated\n" +msgstr "Mục nhập thư mục « .. » trong nút inode thư mục %i không được chấm dứt RỖNG.\n" + +#. @-expanded: inode %i (%Q) is an illegal character device.\n +#: e2fsck/problem.c:994 +msgid "@i %i (%Q) is an @I character @v.\n" +msgstr "Nút inode %i (%Q) là thiết bị ký tự cấm.\n" + +#. @-expanded: inode %i (%Q) is an illegal block device.\n +#: e2fsck/problem.c:999 +msgid "@i %i (%Q) is an @I @b @v.\n" +msgstr "Nút inode %i (%Q) là thiết bị khối cấm.\n" + +#. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n +#: e2fsck/problem.c:1004 +msgid "@E is duplicate '.' @e.\n" +msgstr "Mục nhập « %Dn » trong %p (%i) là mục nhập « . » trùng.\n" + +#. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n +#: e2fsck/problem.c:1009 +msgid "@E is duplicate '..' @e.\n" +msgstr "Mục nhập « %Dn » trong %p (%i) là mục nhập « .. » trùng.\n" + +#: e2fsck/problem.c:1014 e2fsck/problem.c:1290 +#, c-format +msgid "Internal error: couldn't find dir_info for %i.\n" +msgstr "Lỗi nội bộ : không tìm thấy thông tin thư mục (dir_info) về %i.\n" + +#. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n +#: e2fsck/problem.c:1019 +msgid "@E has rec_len of %Dr, @s %N.\n" +msgstr "" +"Mục nhập « %Dn » trong %p (%i) có độ dài mục nhập (rec_len) là %Dr,\n" +"còn nên là %N.\n" + +#. @-expanded: error allocating icount structure: %m\n +#: e2fsck/problem.c:1024 +#, c-format +msgid "@A icount structure: %m\n" +msgstr "Gặp lỗi khi cấp phát cấu trúc đếm icount: %m\n" + +#. @-expanded: Error iterating over directory blocks: %m\n +#: e2fsck/problem.c:1029 +#, c-format +msgid "Error iterating over @d @bs: %m\n" +msgstr "Gặp lỗi khi lặp lại trên các khối thư mục: %m\n" + +#. @-expanded: Error reading directory block %b (inode %i): %m\n +#: e2fsck/problem.c:1034 +msgid "Error reading @d @b %b (@i %i): %m\n" +msgstr "Gặp lỗi khi đọc khối thư mục %b (nút inode %i): %m\n" + +#. @-expanded: Error writing directory block %b (inode %i): %m\n +#: e2fsck/problem.c:1039 +msgid "Error writing @d @b %b (@i %i): %m\n" +msgstr "Gặp lỗi khi ghi khối thư mục %b (nút inode %i): %m\n" + +#. @-expanded: error allocating new directory block for inode %i (%s): %m\n +#: e2fsck/problem.c:1044 +#, c-format +msgid "@A new @d @b for @i %i (%s): %m\n" +msgstr "Gặp lỗi khi cấp phát khối thư mục mới cho nút inode %i (%s): %m\n" + +#. @-expanded: Error deallocating inode %i: %m\n +#: e2fsck/problem.c:1049 +#, c-format +msgid "Error deallocating @i %i: %m\n" +msgstr "Gặp lỗi khi hủy cấp phát nút inode %i: %m\n" + +#. @-expanded: directory entry for '.' is big. +#: e2fsck/problem.c:1054 +msgid "@d @e for '.' is big. " +msgstr "mục nhập thư mục cho « . » là quá lớn. " + +#. @-expanded: inode %i (%Q) is an illegal FIFO.\n +#: e2fsck/problem.c:1059 +msgid "@i %i (%Q) is an @I FIFO.\n" +msgstr "Nút inode %i (%Q) là một FIFO cấm.\n" + +#. @-expanded: inode %i (%Q) is an illegal socket.\n +#: e2fsck/problem.c:1064 +msgid "@i %i (%Q) is an @I socket.\n" +msgstr "Nút inode %i (%Q) là một ổ cắm cấm.\n" + +#. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n +#: e2fsck/problem.c:1069 +msgid "Setting filetype for @E to %N.\n" +msgstr "Đang đặt kiểu tập tin cho mục nhập « %Dn » trong %p (%i) thành %N.\n" + +#. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n +#: e2fsck/problem.c:1074 +msgid "@E has an incorrect filetype (was %Dt, @s %N).\n" +msgstr "" +"Mục nhập « %Dn » trong %p (%i) có kiểu tên tập tin không đúng (đã %Dt,\n" +"còn nên là %N).\n" + +#. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n +#: e2fsck/problem.c:1079 +msgid "@E has filetype set.\n" +msgstr "Mục nhập « %Dn » trong %p (%i) đã đặt kiểu tên tập tin.\n" + +#. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n +#: e2fsck/problem.c:1084 +msgid "@E has a @z name.\n" +msgstr "Mục nhập « %Dn » trong %p (%i) có tên dài bằng số không.\n" + +#. @-expanded: Symlink %Q (inode #%i) is invalid.\n +#: e2fsck/problem.c:1089 +msgid "Symlink %Q (@i #%i) is @n.\n" +msgstr "Liên kết tượng trưng %Q (nút inode #%i) là không hợp lệ.\n" + +#. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n +#: e2fsck/problem.c:1094 +msgid "@a @b @F @n (%If).\n" +msgstr "Khối thuộc tính đã mở rộng cho nút inode %i (%Q) là không hợp lệ (%If).\n" + +#. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n +#: e2fsck/problem.c:1099 +msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n" +msgstr "" +"Hệ thống tập tin chứa tập tin lớn, còn thiếu cờ tập tin lớn (LARGE_FILE)\n" +"trong siêu khối.\n" + +#. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n +#: e2fsck/problem.c:1104 +msgid "@p @h %d: node (%B) not referenced\n" +msgstr "Gặp lỗi trong nút inode thư mục HCÂY %d: nút (%B) không có tham chiếu.\n" + +#. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n +#: e2fsck/problem.c:1109 +msgid "@p @h %d: node (%B) referenced twice\n" +msgstr "Gặp lỗi trong nút inode thư mục HCÂY %d: nút (%B) có tham chiếu hai lần.\n" + +#. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n +#: e2fsck/problem.c:1114 +msgid "@p @h %d: node (%B) has bad min hash\n" +msgstr "Gặp lỗi trong nút inode thư mục HCÂY %d: nút (%B) có băm tối thiểu sai.\n" + +#. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n +#: e2fsck/problem.c:1119 +msgid "@p @h %d: node (%B) has bad max hash\n" +msgstr "Gặp lỗi trong nút inode thư mục HCÂY %d: nút (%B) có băm tối đa sai.\n" + +#. @-expanded: invalid HTREE directory inode %d (%q). +#: e2fsck/problem.c:1124 +msgid "@n @h %d (%q). " +msgstr "Nút inode thư mục HCÂY không hợp lệ %d (%q). " + +#. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n +#: e2fsck/problem.c:1128 +msgid "@p @h %d (%q): bad @b number %b.\n" +msgstr "Gặp lỗi trong nút inode thư mục HCÂY %d (%q): số hiệu khối sai %b.\n" + +#. @-expanded: problem in HTREE directory inode %d: root node is invalid\n +#: e2fsck/problem.c:1138 +#, c-format +msgid "@p @h %d: root node is @n\n" +msgstr "Gặp lỗi trong nút inode thư mục HCÂY %d: nút gốc là không hợp lệ.\n" + +#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n +#: e2fsck/problem.c:1143 +msgid "@p @h %d: node (%B) has @n limit (%N)\n" +msgstr "" +"Gặp lỗi trong nút inode thư mục HCÂY %d: nút (%B)\n" +"có hạn chế không hợp lệ (%N).\n" + +#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n +#: e2fsck/problem.c:1148 +msgid "@p @h %d: node (%B) has @n count (%N)\n" +msgstr "" +"Gặp lỗi trong nút inode thư mục HCÂY %d: nút (%B) có số đếm\n" +"không hợp lệ (%N).\n" + +#. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n +#: e2fsck/problem.c:1153 +msgid "@p @h %d: node (%B) has an unordered hash table\n" +msgstr "" +"Gặp lỗi trong nút inode thư mục HCÂY %d: nút (%B) có bảng băm\n" +"không có thứ tự.\n" + +#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth\n +#: e2fsck/problem.c:1158 +msgid "@p @h %d: node (%B) has @n depth\n" +msgstr "" +"Gặp lỗi trong nút inode thư mục HCÂY %d: nút (%B) có độ sâu\n" +"không hợp lệ.\n" + +#. @-expanded: Duplicate entry '%Dn' in %p (%i) found. +#: e2fsck/problem.c:1163 +msgid "Duplicate @E found. " +msgstr "Tìm thấy mục nhập trùng « %Dn » trong %p (%i). " + +#. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n +#. @-expanded: Rename to %s +#: e2fsck/problem.c:1168 +#, no-c-format +msgid "" +"@E has a non-unique filename.\n" +"Rename to %s" +msgstr "" +"Mục nhập trùng « %Dn » trong %p (%i) có tên tập tin không duy nhất.\n" +"Thay đổi tên thành %s" + +#. @-expanded: Duplicate entry '%Dn' found.\n +#. @-expanded: \tMarking %p (%i) to be rebuilt.\n +#. @-expanded: \n +#: e2fsck/problem.c:1173 +msgid "" +"Duplicate @e '%Dn' found.\n" +"\tMarking %p (%i) to be rebuilt.\n" +"\n" +msgstr "" +"Tìm thấy mục nhập trùng « %Dn ».\n" +"Đang nhãn %p (%i) để được xây dựng lại.\n" +"\n" + +#. @-expanded: Pass 3: Checking directory connectivity\n +#: e2fsck/problem.c:1180 +msgid "Pass 3: Checking @d connectivity\n" +msgstr "Lần qua 3: đang kiểm tra khả năng kíêt nối thư mục\n" + +#. @-expanded: root inode not allocated. +#: e2fsck/problem.c:1185 +msgid "@r not allocated. " +msgstr "Chưa cấp phát nút inode gốc. " + +#. @-expanded: No room in lost+found directory. +#: e2fsck/problem.c:1190 +msgid "No room in @l @d. " +msgstr "Không có chỗ còn rảnh trong thư mục mất+tìm. " + +#. @-expanded: Unconnected directory inode %i (%p)\n +#: e2fsck/problem.c:1195 +#, c-format +msgid "Unconnected @d @i %i (%p)\n" +msgstr "Có nút inode thư mục chưa kết nối %i (%p)\n" + +#. @-expanded: /lost+found not found. +#: e2fsck/problem.c:1200 +msgid "/@l not found. " +msgstr "Không tìm thấy /mất+tìm. " + +#. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n +#: e2fsck/problem.c:1205 +msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n" +msgstr "« .. » trong %Q (%i) là %P (%j), còn nên là %q (%d).\n" + +#. @-expanded: Bad or non-existent /lost+found. Cannot reconnect.\n +#: e2fsck/problem.c:1210 +msgid "Bad or non-existent /@l. Cannot reconnect.\n" +msgstr "Có /mất+tìm sai hay không tồn tại nên không thể kết nối lại.\n" + +#. @-expanded: Could not expand /lost+found: %m\n +#: e2fsck/problem.c:1215 +#, c-format +msgid "Could not expand /@l: %m\n" +msgstr "Không thể mở rộng /mất+tìm: %m\n" + +#: e2fsck/problem.c:1220 +#, c-format +msgid "Could not reconnect %i: %m\n" +msgstr "Không thể kết nối lại %i: %m\n" + +#. @-expanded: Error while trying to find /lost+found: %m\n +#: e2fsck/problem.c:1225 +#, c-format +msgid "Error while trying to find /@l: %m\n" +msgstr "Gặp lỗi khi cố gắng tìm /mất+tìm: %m\n" + +#. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n +#: e2fsck/problem.c:1230 +#, c-format +msgid "ext2fs_new_@b: %m while trying to create /@l @d\n" +msgstr "ext2fs_new_@b: %m trong khi cố gắng tạo thư mục /mất+tìm\n" + +#. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n +#: e2fsck/problem.c:1235 +#, c-format +msgid "ext2fs_new_@i: %m while trying to create /@l @d\n" +msgstr "ext2fs_new_@i: %m trong khi cố gắng tạo thư mục /mất+tìm\n" + +#. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n +#: e2fsck/problem.c:1240 +#, c-format +msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n" +msgstr "ext2fs_new_dir_@b: %m trong khi cố gắng tạo khối thư mục mới\n" + +#. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n +#: e2fsck/problem.c:1245 +#, c-format +msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n" +msgstr "ext2fs_write_dir_@b: %m trong khi ghi khối thư mục cho /mất+tìm\n" + +#. @-expanded: Error while adjusting inode count on inode %i\n +#: e2fsck/problem.c:1250 +#, c-format +msgid "Error while adjusting @i count on @i %i\n" +msgstr "Gặp lỗi khi điều chỉnh số đếm nút inode trên nút inode %i\n" + +#. @-expanded: Couldn't fix parent of inode %i: %m\n +#. @-expanded: \n +#: e2fsck/problem.c:1255 +#, c-format +msgid "" +"Couldn't fix parent of @i %i: %m\n" +"\n" +msgstr "" +"Không thể sửa chữa mẹ của nút inode %i: %m\n" +"\n" + +#. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n +#. @-expanded: \n +#: e2fsck/problem.c:1260 +#, c-format +msgid "" +"Couldn't fix parent of @i %i: Couldn't find parent @d @e\n" +"\n" +msgstr "" +"Không thể sửa chữa mẹ của nút inode %i: không tìm thấy mục nhập thư mục mẹ\n" +"\n" + +#. @-expanded: Error creating root directory (%s): %m\n +#: e2fsck/problem.c:1270 +#, c-format +msgid "Error creating root @d (%s): %m\n" +msgstr "Gặp lỗi khi tạo thư mục gốc (%s): %m\n" + +#. @-expanded: Error creating /lost+found directory (%s): %m\n +#: e2fsck/problem.c:1275 +#, c-format +msgid "Error creating /@l @d (%s): %m\n" +msgstr "Gặp lỗi khi tạo thư mục /mất+tìm (%s): %m\n" + +#. @-expanded: root inode is not a directory; aborting.\n +#: e2fsck/problem.c:1280 +msgid "@r is not a @d; aborting.\n" +msgstr "Nút inode gốc không phải là một thư mục nên hủy bỏ.\n" + +#. @-expanded: Cannot proceed without a root inode.\n +#: e2fsck/problem.c:1285 +msgid "Cannot proceed without a @r.\n" +msgstr "Không thể tiếp tục khi không có nút inode gốc.\n" + +#. @-expanded: /lost+found is not a directory (ino=%i)\n +#: e2fsck/problem.c:1295 +#, c-format +msgid "/@l is not a @d (ino=%i)\n" +msgstr "/mất+tìm không phải là thư mục (ino=%i)\n" + +#: e2fsck/problem.c:1302 +msgid "Pass 3A: Optimizing directories\n" +msgstr "Lần qua 3A: đang tối ưu hoá các thư mục\n" + +#: e2fsck/problem.c:1307 +#, c-format +msgid "Failed to create dirs_to_hash iterator: %m" +msgstr "Lỗi tạo bộ lặp lại thư mục tới băm (dirs_to_hash): %m" + +#: e2fsck/problem.c:1312 +msgid "Failed to optimize directory %q (%d): %m" +msgstr "Lỗi tối ưu hoá thư mục %q (%d): %m" + +#: e2fsck/problem.c:1317 +msgid "Optimizing directories: " +msgstr "Đang tối ưu hoá các thư mục: " + +#: e2fsck/problem.c:1334 +msgid "Pass 4: Checking reference counts\n" +msgstr "Lần qua 4: đang kiểm tra các số đếm tham chiếu\n" + +#. @-expanded: unattached zero-length inode %i. +#: e2fsck/problem.c:1339 +#, c-format +msgid "@u @z @i %i. " +msgstr "Có nút inode dài bằng không chưa kết nối %i. " + +#. @-expanded: unattached inode %i\n +#: e2fsck/problem.c:1344 +#, c-format +msgid "@u @i %i\n" +msgstr "Có nút inode chưa kết nối %i.\n" + +#. @-expanded: inode %i ref count is %Il, should be %N. +#: e2fsck/problem.c:1349 +msgid "@i %i ref count is %Il, @s %N. " +msgstr "Nút inode %i số đếm tham chiếu là %Il, còn nên là %N. " + +#. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n +#. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n +#. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il. They should be the same!\n +#: e2fsck/problem.c:1353 +msgid "" +"WARNING: PROGRAMMING BUG IN E2FSCK!\n" +"\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n" +"@i_link_info[%i] is %N, @i.i_links_count is %Il. They @s the same!\n" +msgstr "" +"CẢNH BÁO : GẶP LỖI LẬP TRÌNH TRONG E2FSCK !\n" +"HOẶC NGƯỜI NÀO KIỂM TRA KHÔNG KHÔN NGOAN MỘT HỆ THỐNG TẬP TIN\n" +"ĐÃ GẮN KẾT (HOẠT ĐỘNG).\n" +"Thông tin liên kết nút inode (inode_link_info) [%i] là %N,\n" +"số đếm liên kết nút inode (inode.i_links_count) là %Il.\n" +"Hai số này nên là trùng !\n" + +#. @-expanded: Pass 5: Checking group summary information\n +#: e2fsck/problem.c:1363 +msgid "Pass 5: Checking @g summary information\n" +msgstr "Lần qua 5: đang kiểm tra thông tin tóm tắt nhóm\n" + +#. @-expanded: Padding at end of inode bitmap is not set. +#: e2fsck/problem.c:1368 +msgid "Padding at end of @i @B is not set. " +msgstr "Chưa đặt độ đệm tại kết thúc của sơ đồ bit inode. " + +#. @-expanded: Padding at end of block bitmap is not set. +#: e2fsck/problem.c:1373 +msgid "Padding at end of @b @B is not set. " +msgstr "Chưa đặt độ đệm tại kết thúc của sơ đồ bit khối. " + +#. @-expanded: block bitmap differences: +#: e2fsck/problem.c:1378 +msgid "@b @B differences: " +msgstr "Hiệu sơ đồ bit khối: " + +#. @-expanded: inode bitmap differences: +#: e2fsck/problem.c:1398 +msgid "@i @B differences: " +msgstr "Hiệu sơ đồ bit inode: " + +#. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n +#: e2fsck/problem.c:1418 +msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n" +msgstr "Số đếm nút inode rảnh là không đúng cho nhóm số %g (%i, tổng=%j).\n" + +#. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n +#: e2fsck/problem.c:1423 +msgid "Directories count wrong for @g #%g (%i, counted=%j).\n" +msgstr "Số đếm thư mục là không đúng cho nhóm số %g (%i, tổng=%j).\n" + +#. @-expanded: Free inodes count wrong (%i, counted=%j).\n +#: e2fsck/problem.c:1428 +msgid "Free @is count wrong (%i, counted=%j).\n" +msgstr "Số đếm nút inode rảnh là không đúng (%i, tổng=%j).\n" + +#. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n +#: e2fsck/problem.c:1433 +msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n" +msgstr "Số đếm khối rảnh là không đúng cho nhóm số %g (%b, tổng=%c).\n" + +#. @-expanded: Free blocks count wrong (%b, counted=%c).\n +#: e2fsck/problem.c:1438 +msgid "Free @bs count wrong (%b, counted=%c).\n" +msgstr "Số đếm khối rảnh là không đúng (%b, tổng=%c).\n" + +#. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap +#. @-expanded: endpoints (%i, %j)\n +#: e2fsck/problem.c:1443 +msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n" +msgstr "" +"LỖI LẬP TRÌNH: điểm cuối sơ đồ bit của hệ thống tập tin (số %N) (%b, %c)\n" +"không khớp với những điểm cuối sơ đồ bit đã tính (%i, %j)\n" + +#: e2fsck/problem.c:1449 +msgid "Internal error: fudging end of bitmap (%N)\n" +msgstr "Lỗi nội bộ : đang làm quấy quá kết thúc của sơ đồ bit (%N)\n" + +#. @-expanded: Error copying in replacement inode bitmap: %m\n +#: e2fsck/problem.c:1454 +#, c-format +msgid "Error copying in replacement @i @B: %m\n" +msgstr "Gặp lỗi khi sao chép vào sơ đồ bit nút inode thay thế: %m\n" + +#. @-expanded: Error copying in replacement block bitmap: %m\n +#: e2fsck/problem.c:1459 +#, c-format +msgid "Error copying in replacement @b @B: %m\n" +msgstr "Gặp lỗi khi sao chép vào sơ đồ bit khối thay thế: %m\n" + +#: e2fsck/problem.c:1597 +#, c-format +msgid "Unhandled error code (0x%x)!\n" +msgstr "Mã lỗi chưa thao tác (0x%x)!\n" + +#: e2fsck/problem.c:1691 +msgid "IGNORED" +msgstr "BỊ BỎ QUA" + +#: e2fsck/scantest.c:81 +#, c-format +msgid "Memory used: %d, elapsed time: %6.3f/%6.3f/%6.3f\n" +msgstr "Bộ nhớ đã chiếm: %d, thời gian đã qua: %6.3f/%6.3f/%6.3f\n" + +#: e2fsck/scantest.c:100 +#, c-format +msgid "size of inode=%d\n" +msgstr "kích cỡ nút inode=%d\n" + +#: e2fsck/scantest.c:121 +msgid "while starting inode scan" +msgstr "trong khi khởi chạy quét nút inode" + +#: e2fsck/scantest.c:132 +msgid "while doing inode scan" +msgstr "trong khi chạy quét nút inode" + +#: e2fsck/super.c:200 +#, c-format +msgid "while calling ext2fs_block_iterate for inode %d" +msgstr "trong khi gọi hàm lặp lại khối « ext2fs_block_iterate » cho nút inode %d" + +#: e2fsck/super.c:223 +#, c-format +msgid "while calling ext2fs_adjust_ea_refocunt for inode %d" +msgstr "" +"trong khi gọi hàm điều chỉnh số đếm tham chiếu « ext2fs_adjust_ea_refocunt »\n" +"cho nút inode %d" + +#: e2fsck/super.c:281 +msgid "Truncating" +msgstr "Đang cắt ngắn" + +#: e2fsck/super.c:282 +msgid "Clearing" +msgstr "Đang xoá sạch" + +#: e2fsck/swapfs.c:98 +msgid "while calling ext2fs_block_iterate" +msgstr "trong khi gọi hàm lặp lại khối « ext2fs_block_iterate »" + +#: e2fsck/swapfs.c:104 +msgid "while calling iterator function" +msgstr "trong khi gọi hàm lặp lại" + +#: e2fsck/swapfs.c:126 +msgid "while allocating inode buffer" +msgstr "trong khi cấp phát bộ đệm nút inode" + +#: e2fsck/swapfs.c:138 +#, c-format +msgid "while reading inode table (group %d)" +msgstr "trong khi đọc bảng nút inode (nhóm %d)" + +#: e2fsck/swapfs.c:176 +#, c-format +msgid "while writing inode table (group %d)" +msgstr "trong khi ghi bảng nút inode (nhóm %d)" + +#: e2fsck/swapfs.c:223 +#, c-format +msgid "Pass 0: Doing byte-swap of filesystem\n" +msgstr "Lần qua 0: đang chạy việc trao đổi byte hệ thống tập tin\n" + +#: e2fsck/swapfs.c:230 +#, c-format +msgid "" +"%s: the filesystem must be freshly checked using fsck\n" +"and not mounted before trying to byte-swap it.\n" +msgstr "" +"%s: hệ thống tập tin phải được kiểm tra mới, dùng fsck,\n" +"và không được gắn kết trước khi cố gắng trao đổi byte nó.\n" + +#: e2fsck/swapfs.c:265 +msgid "Byte swap" +msgstr "Trao đổi byte" + +#: e2fsck/unix.c:74 +#, c-format +msgid "" +"Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n" +"\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n" +"\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n" +"\t\t[-E extended-options] device\n" +msgstr "" +"Cách sử dụng: %s [-panyrcdfvstDFSV] [-b siêu_khối] [-B cỡ_khối]\n" +"\t\t[-I khối_đệm_inode] [-P cỡ_inode_xử_lý]\n" +"\t\t[-l|-L tập_tin_khối_hỏng] [-C fd] [-j nhật_ký_bên_ngoài]\n" +"\t\t[-E tùy_chọn_mở_rộng] thiết_bị\n" + +#: e2fsck/unix.c:80 +#, c-format +msgid "" +"\n" +"Emergency help:\n" +" -p Automatic repair (no questions)\n" +" -n Make no changes to the filesystem\n" +" -y Assume \"yes\" to all questions\n" +" -c Check for bad blocks and add them to the badblock list\n" +" -f Force checking even if filesystem is marked clean\n" +msgstr "" +"\n" +"Trợ giúp khẩn cấp:\n" +" -p Sửa chữa tự động (không có câu hỏi)\n" +" -n Không thay đổi hệ thống tập tin\n" +" -y Giả sử trả lời « Có » mọi câu hỏi\n" +" -c Kiểm tra tìm khối hỏng: thêm vào danh sách khối hỏng\n" +" -f Buộc kiểm tra ngay cả khi hệ thống tập tin có nhãn là sạch\n" + +#: e2fsck/unix.c:86 +#, c-format +msgid "" +" -v Be verbose\n" +" -b superblock Use alternative superblock\n" +" -B blocksize Force blocksize when looking for superblock\n" +" -j external_journal Set location of the external journal\n" +" -l bad_blocks_file Add to badblocks list\n" +" -L bad_blocks_file Set badblocks list\n" +msgstr "" +" -v \t\tXuất chi tiết\n" +" -b siêu_khối \t\tDùng siêu khối xen kẽ\n" +" -B cỡ_khối \t\tBuộc kích cỡ của khối khi tìm siêu khối\n" +" -j nhật_ký_bên_ngoài \tĐặt địa điểm của nhật ký bên ngoài\n" +" -l tập_tin_khối_hỏng Thêm vào danh sách các khối hỏng\n" +" -L tập_tin_khối_hỏng Đặt danh sách các khối hỏng\n" + +#: e2fsck/unix.c:121 +#, c-format +msgid "%s: %d/%d files (%0d.%d%% non-contiguous), %u/%u blocks\n" +msgstr "%s: %d/%d tập tin (%0d.%d%% không kề nhau), %u/%u khối\n" + +#: e2fsck/unix.c:133 +#, c-format +msgid " # of inodes with ind/dind/tind blocks: %d/%d/%d\n" +msgstr " số inode có khối ind/dind/tind: %d/%d/%d\n" + +#: e2fsck/unix.c:177 misc/badblocks.c:779 misc/tune2fs.c:792 misc/util.c:151 +#: resize/main.c:184 +#, c-format +msgid "while determining whether %s is mounted." +msgstr "trong khi quyết định nếu %s đã gắn kết chưa." + +#: e2fsck/unix.c:195 +#, c-format +msgid "Warning! %s is mounted.\n" +msgstr "Cảnh báo ! %s đã gắn kết.\n" + +#: e2fsck/unix.c:199 +#, c-format +msgid "%s is mounted. " +msgstr "%s đã gắn kết. " + +#: e2fsck/unix.c:201 +msgid "" +"Cannot continue, aborting.\n" +"\n" +msgstr "" +"Không thể tiếp tục nên hủy bỏ.\n" +"\n" + +#: e2fsck/unix.c:202 +#, c-format +msgid "" +"\n" +"\n" +"WARNING!!! Running e2fsck on a mounted filesystem may cause\n" +"SEVERE filesystem damage.\n" +"\n" +msgstr "" +"\n" +"\n" +"CẢNH BÁO !!! Việc chạy e2fsck trên hệ thống tập tin đã gắn kết\n" +"có thể LÀM HỎNG NẶNG hệ thống tập tin đó.\n" +"\n" + +#: e2fsck/unix.c:205 +msgid "Do you really want to continue" +msgstr "Bạn thực sự muốn tiếp tục" + +#: e2fsck/unix.c:207 +#, c-format +msgid "check aborted.\n" +msgstr "kiểm tra bị hủy bỏ.\n" + +#: e2fsck/unix.c:277 +msgid " contains a file system with errors" +msgstr " chứa hệ thống tập tin có lỗi" + +#: e2fsck/unix.c:279 +msgid " was not cleanly unmounted" +msgstr " đã không tháo gắn kết sạch" + +#: e2fsck/unix.c:283 +#, c-format +msgid " has been mounted %u times without being checked" +msgstr " đã được gắn kết %u lần mà không được kiểm tra" + +#: e2fsck/unix.c:291 +#, c-format +msgid " has gone %u days without being checked" +msgstr " đã chạy trong %u ngày mà không được kiểm tra" + +#: e2fsck/unix.c:300 +msgid ", check forced.\n" +msgstr ", kiểm tra bị ép buộc.\n" + +#: e2fsck/unix.c:303 +#, c-format +msgid "%s: clean, %d/%d files, %u/%u blocks" +msgstr "%s: sạch, %d/%d tập tin, %u/%u khối" + +#: e2fsck/unix.c:320 +msgid " (check deferred; on battery)" +msgstr " (kiểm tra bị hoãn; chạy bằng pin)" + +#: e2fsck/unix.c:323 +msgid " (check after next mount)" +msgstr " (kiểm tra sau khi gắn kết lần kế tiếp)" + +#: e2fsck/unix.c:325 +#, c-format +msgid " (check in %ld mounts)" +msgstr " (kiểm tra trong %ld lần gắn kết)" + +#: e2fsck/unix.c:471 +#, c-format +msgid "ERROR: Couldn't open /dev/null (%s)\n" +msgstr "LỖI: không thể mở (%s)\n" + +#: e2fsck/unix.c:542 +#, c-format +msgid "Invalid EA version.\n" +msgstr "Phiên bản EA không hợp lệ.\n" + +#: e2fsck/unix.c:548 +#, c-format +msgid "Unknown extended option: %s\n" +msgstr "Tùy chọn đã mở rộng không rõ : %s\n" + +#: e2fsck/unix.c:566 +#, c-format +msgid "" +"Syntax error in e2fsck config file (%s, line #%d)\n" +"\t%s\n" +msgstr "" +"Gặp lỗi cú pháp trong tập tin cấu hình e2fsck (%s, dòng số %d)\n" +"\t%s\n" + +#: e2fsck/unix.c:623 +#, c-format +msgid "Error validating file descriptor %d: %s\n" +msgstr "Gặp lỗi khi hợp lệ hóa mô tả tập tin %d: %s\n" + +#: e2fsck/unix.c:627 +msgid "Invalid completion information file descriptor" +msgstr "Mô tả tập tin thông tin hoà chỉnh không hợp lệ" + +#: e2fsck/unix.c:642 +msgid "Only one of the options -p/-a, -n or -y may be specified." +msgstr "Có thể xác định chỉ một của những tùy chọn -p/-a, -n hay -y thôi." + +#: e2fsck/unix.c:663 +#, c-format +msgid "The -t option is not supported on this version of e2fsck.\n" +msgstr "Tùy chọn « -t » không được hỗ trợ bởi phiên bản e2fsck này.\n" + +#: e2fsck/unix.c:728 +#, c-format +msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n" +msgstr "" +"Hệ thống tập tin trao đổi byte không được biên dịch\n" +"trong phiên bản e2fsck này\n" + +#: e2fsck/unix.c:751 misc/tune2fs.c:459 misc/tune2fs.c:717 misc/tune2fs.c:734 +#, c-format +msgid "Unable to resolve '%s'" +msgstr "Không thể quyết định « %s »" + +#: e2fsck/unix.c:782 +#, c-format +msgid "Incompatible options not allowed when byte-swapping.\n" +msgstr "Không cho phép tùy chọn không tương thích khi trao đổi byte.\n" + +#: e2fsck/unix.c:789 +#, c-format +msgid "The -c and the -l/-L options may not be both used at the same time.\n" +msgstr "Không cho phép sử dụng tùy chọn cả « --c » lẫn « --l/L » đều đồng thời.\n" + +#: e2fsck/unix.c:867 +#, c-format +msgid "Error: ext2fs library version out of date!\n" +msgstr "Lỗi: phiên bản thư viện ext2fs quá cũ !\n" + +#: e2fsck/unix.c:875 +msgid "while trying to initialize program" +msgstr "trong khi cố gắng sở khởi chương trình" + +#: e2fsck/unix.c:889 +#, c-format +msgid "\tUsing %s, %s\n" +msgstr "\tDùng %s, %s\n" + +#: e2fsck/unix.c:901 +msgid "need terminal for interactive repairs" +msgstr "cần thiết bàn điều khiển để sửa chữa tương tác" + +#: e2fsck/unix.c:940 +#, c-format +msgid "%s trying backup blocks...\n" +msgstr "%s đang cố gắng các khối dự trữ...\n" + +#: e2fsck/unix.c:941 +msgid "Couldn't find ext2 superblock," +msgstr "Không tìm thấy siêu khối ext2," + +#: e2fsck/unix.c:942 +msgid "Group descriptors look bad..." +msgstr "Các mô tả nhóm hình như sai..." + +#: e2fsck/unix.c:953 +#, c-format +msgid "" +"The filesystem revision is apparently too high for this version of e2fsck.\n" +"(Or the filesystem superblock is corrupt)\n" +"\n" +msgstr "" +"Bản sửa đổi hệ thống tập tin có vẻ quá cao cho phiên bản e2fsck này\n" +"(hoặc siêu khối hệ thống tập tin bị hỏng).\n" +"\n" + +#: e2fsck/unix.c:959 +#, c-format +msgid "Could this be a zero-length partition?\n" +msgstr "Phân vùng này có thể có độ dài bằng không ?\n" + +#: e2fsck/unix.c:961 +#, c-format +msgid "You must have %s access to the filesystem or be root\n" +msgstr "Bạn phải có quyền truy cập %s hệ thống tập tin, hay là người chủ (root)\n" + +#: e2fsck/unix.c:966 +#, c-format +msgid "Possibly non-existent or swap device?\n" +msgstr "Có thể là thiết bị không tồn tại, hoặc thiết bị trao đổi ?\n" + +#: e2fsck/unix.c:968 +#, c-format +msgid "Filesystem mounted or opened exclusively by another program?\n" +msgstr "Hệ thống tập tin đã được gắn kết hay mở hoàn toàn bởi chương trình khác ?\n" + +#: e2fsck/unix.c:972 +#, c-format +msgid "" +"Disk write-protected; use the -n option to do a read-only\n" +"check of the device.\n" +msgstr "" +"Đĩa có chống ghi; hãy dùng tùy chọn « -n » để chạy\n" +"việc kiểm tra chỉ đọc thiết bị đó.\n" + +#: e2fsck/unix.c:989 +msgid "Get a newer version of e2fsck!" +msgstr "Lấy phiên bản e2fsck mới hơn !" + +#: e2fsck/unix.c:1010 +#, c-format +msgid "while checking ext3 journal for %s" +msgstr "trong khi kiểm tra nhật ký ext3 tìm %s" + +#: e2fsck/unix.c:1021 +#, c-format +msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n" +msgstr "" +"Cảnh báo : đang bỏ qua việc phục hồi nhật ký vì đang kiểm tra\n" +"hệ thống tập tin một cách chỉ đọc.\n" + +#: e2fsck/unix.c:1034 +#, c-format +msgid "unable to set superblock flags on %s\n" +msgstr "không thể đặt cờ siêu khối trên %s\n" + +#: e2fsck/unix.c:1040 +#, c-format +msgid "while recovering ext3 journal of %s" +msgstr "trong khi phục hồi nhật ký ext3 của %s" + +#: e2fsck/unix.c:1069 +msgid "Warning: compression support is experimental.\n" +msgstr "Cảnh báo : cách hỗ trợ khả năng nén là thực nghiệm.\n" + +#: e2fsck/unix.c:1074 +#, c-format +msgid "" +"E2fsck not compiled with HTREE support,\n" +"\tbut filesystem %s has HTREE directories.\n" +msgstr "" +"E2fsck không được biên dịch để hỗ trợ HCÂY,\n" +"nhưng hệ thống tập tin %s có thư mục HCÂY.\n" + +#: e2fsck/unix.c:1118 +#, c-format +msgid "%s: Filesystem byte order already normalized.\n" +msgstr "%s: thứ tự bytê trong hệ thống tập tin đã được tiêu chuẩn hoá.\n" + +#: e2fsck/unix.c:1138 +msgid "while reading bad blocks inode" +msgstr "trong khi đọc nút inode khối hỏng" + +#: e2fsck/unix.c:1140 +#, c-format +msgid "This doesn't bode well, but we'll try to go on...\n" +msgstr "Trường hợp này không phải tốt, nhưng sẽ cố gắng tiếp tục...\n" + +#: e2fsck/unix.c:1147 +#, c-format +msgid "Restarting e2fsck from the beginning...\n" +msgstr "Đang khởi chạy lại hoàn toàn e2fsck...\n" + +#: e2fsck/unix.c:1151 +msgid "while resetting context" +msgstr "trong khi đặt lại ngữ cảnh" + +#: e2fsck/unix.c:1158 +#, c-format +msgid "%s: e2fsck canceled.\n" +msgstr "%s: e2fsck bị thôi.\n" + +#: e2fsck/unix.c:1163 +msgid "aborted" +msgstr "bị hủy bỏ" + +#: e2fsck/unix.c:1171 +#, c-format +msgid "" +"\n" +"%s: ***** FILE SYSTEM WAS MODIFIED *****\n" +msgstr "" +"\n" +"%s: ••••• HỆ THỐNG TẬP TIN BỊ SỬA ĐỔI •••••\n" + +#: e2fsck/unix.c:1174 +#, c-format +msgid "%s: ***** REBOOT LINUX *****\n" +msgstr "%s: ••••• HÃY KHỞI ĐỘNG LẠI LINUX •••••\n" + +#: e2fsck/unix.c:1182 +#, c-format +msgid "" +"\n" +"%s: ********** WARNING: Filesystem still has errors **********\n" +"\n" +msgstr "" +"\n" +"%s: •••••••••• CẢNH BÁO : hệ thống tập tin vẫn còn có lỗi ••••••••••\n" +"\n" + +#: e2fsck/util.c:131 misc/util.c:68 +msgid "yY" +msgstr "cC" + +#: e2fsck/util.c:132 +msgid "nN" +msgstr "kK" + +#: e2fsck/util.c:146 +msgid "" +msgstr "" + +#: e2fsck/util.c:148 +msgid "" +msgstr "" + +#: e2fsck/util.c:150 +msgid " (y/n)" +msgstr " (c/k)" + +#: e2fsck/util.c:165 +msgid "cancelled!\n" +msgstr "bị thôi !\n" + +#: e2fsck/util.c:180 +msgid "yes\n" +msgstr "có\n" + +#: e2fsck/util.c:182 +msgid "no\n" +msgstr "không\n" + +#: e2fsck/util.c:192 +#, c-format +msgid "" +"%s? no\n" +"\n" +msgstr "" +"%s? không\n" +"\n" + +#: e2fsck/util.c:196 +#, c-format +msgid "" +"%s? yes\n" +"\n" +msgstr "" +"%s? có\n" +"\n" + +#: e2fsck/util.c:200 +msgid "yes" +msgstr "có" + +#: e2fsck/util.c:200 +msgid "no" +msgstr "không" + +#: e2fsck/util.c:213 +#, c-format +msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s" +msgstr "e2fsck_read_bitmaps: khối sơ đồ bit cấm cho %s" + +#: e2fsck/util.c:218 +msgid "reading inode and block bitmaps" +msgstr "đang đọc sơ đồ bit cả nút inode lẫn khối" + +#: e2fsck/util.c:223 +#, c-format +msgid "while retrying to read bitmaps for %s" +msgstr "trong khi cố gắng đọc sơ đồ bit cho %s" + +#: e2fsck/util.c:235 +msgid "writing block bitmaps" +msgstr "đang ghi sơ đồ bit khối" + +#: e2fsck/util.c:240 +#, c-format +msgid "while retrying to write block bitmaps for %s" +msgstr "trong khi thử lại ghi sơ đồ bit khối cho %s" + +#: e2fsck/util.c:247 +msgid "writing inode bitmaps" +msgstr "đang ghi sơ đồ bit nút inode" + +#: e2fsck/util.c:252 +#, c-format +msgid "while retrying to write inode bitmaps for %s" +msgstr "trong khi thử lại ghi sơ đồ bit nút inode cho %s" + +#: e2fsck/util.c:265 +#, c-format +msgid "" +"\n" +"\n" +"%s: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.\n" +"\t(i.e., without -a or -p options)\n" +msgstr "" +"\n" +"\n" +"%s: SỰ MÂU THUẪN BẤT NGỜ : HÃY TỰ CHẠY fsck.\n" +"\t(tức là không có tùy chọn « -a » hay « -p »).\n" + +#: e2fsck/util.c:330 +#, c-format +msgid "Memory used: %dk/%dk (%dk/%dk), " +msgstr "Bộ nhớ đã chiếm: %dk/%dk (%dk/%dk), " + +#: e2fsck/util.c:334 +#, c-format +msgid "Memory used: %d, " +msgstr "Bộ nhớ đã chiếm: %d, " + +#: e2fsck/util.c:340 +#, c-format +msgid "time: %5.2f/%5.2f/%5.2f\n" +msgstr "thời gian: %5.2f/%5.2f/%5.2f\n" + +#: e2fsck/util.c:345 +#, c-format +msgid "elapsed time: %6.3f\n" +msgstr "thời gian đã qua: %6.3f\n" + +#: e2fsck/util.c:359 +#, c-format +msgid "while reading inode %ld in %s" +msgstr "trong khi đọc nút inode %ld trong %s" + +#: e2fsck/util.c:373 e2fsck/util.c:386 +#, c-format +msgid "while writing inode %ld in %s" +msgstr "trong khi ghi nút inode %ld trong %s" + +#: misc/badblocks.c:60 +msgid "done \n" +msgstr "đã xong \n" + +#: misc/badblocks.c:78 +#, c-format +msgid "" +"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n" +" [-c blocks_at_once] [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n" +" device [last_block [start_block]]\n" +msgstr "" +"Cách sử dụng: %s [-b cỡ_khối] [-i tập_tin_nhập] [-o tập_tin_xuất] [-svwnf]\n" +" [-c các_khối_cùng_lúc] [-p số_lần_qua] [-t mẫu_thử [-t mẫu_thử [...]]]\n" +" thiết_bị [khối_cuối [khối_đầu]]\n" + +#: misc/badblocks.c:225 +msgid "Testing with random pattern: " +msgstr "Đang thử ra bằng mẫu ngẫu nhiên: " + +#: misc/badblocks.c:243 +msgid "Testing with pattern 0x" +msgstr "Đang thử ra bằng mẫu 0x" + +#: misc/badblocks.c:268 misc/badblocks.c:297 +msgid "during seek" +msgstr "trong khi tìm nơi" + +#: misc/badblocks.c:275 +#, c-format +msgid "Weird value (%ld) in do_read\n" +msgstr "Giá trị lạ (%ld) trong việc đọc « do_read »\n" + +#: misc/badblocks.c:317 +msgid "during ext2fs_sync_device" +msgstr "trong khi đồng bộ hoá thiết bị « ext2fs_sync_device »" + +#: misc/badblocks.c:333 misc/badblocks.c:571 +msgid "while beginning bad block list iteration" +msgstr "trong khi bắt đầu lặp lại danh sách các khối hỏng" + +#: misc/badblocks.c:347 misc/badblocks.c:437 misc/badblocks.c:581 +msgid "while allocating buffers" +msgstr "trong khi cấp phát bộ đệm" + +#: misc/badblocks.c:351 +#, c-format +msgid "Checking blocks %lu to %lu\n" +msgstr "Đang kiểm tra khối trong phạm vị %lu đến %lu\n" + +#: misc/badblocks.c:355 +msgid "Checking for bad blocks in read-only mode\n" +msgstr "Đang kiểm tra tìm khối hỏng trong chế độ chỉ đọc\n" + +#: misc/badblocks.c:364 +msgid "Checking for bad blocks (read-only test): " +msgstr "Đang kiểm tra tìm khối hỏng (thử ra chỉ đọc): " + +#: misc/badblocks.c:444 +msgid "Checking for bad blocks in read-write mode\n" +msgstr "Đang kiểm tra tìm khối hỏng trong chế độ đọc-ghi\n" + +#: misc/badblocks.c:446 misc/badblocks.c:594 +#, c-format +msgid "From block %lu to %lu\n" +msgstr "Phạm vị khối %lu đến %lu\n" + +#: misc/badblocks.c:497 +msgid "Reading and comparing: " +msgstr "Đang đọc và so sánh: " + +#: misc/badblocks.c:593 +msgid "Checking for bad blocks in non-destructive read-write mode\n" +msgstr "Đang kiểm tra tìm khối hỏng trong chế độ đọc-ghi không hủy\n" + +#: misc/badblocks.c:597 +msgid "Checking for bad blocks (non-destructive read-write test)\n" +msgstr "Đang kiểm tra tìm khối hỏng (thử ra đọc-ghi không hủy)\n" + +#: misc/badblocks.c:604 +msgid "" +"\n" +"Interrupt caught, cleaning up\n" +msgstr "" +"\n" +"Mới bắt tín hiệu ngắt, đang làm sạch\n" + +#: misc/badblocks.c:674 +#, c-format +msgid "during test data write, block %lu" +msgstr "trong khi thử ra ghi dữ liệu, khối %lu" + +#: misc/badblocks.c:784 misc/util.c:156 +#, c-format +msgid "%s is mounted; " +msgstr "%s đã được gắn kết; " + +#: misc/badblocks.c:786 +msgid "badblocks forced anyway. Hope /etc/mtab is incorrect.\n" +msgstr "" +"tùy chọn khối hỏng (badblocks) vẫn bị ép buộc.\n" +"Mong là không đúng.\n" + +#: misc/badblocks.c:791 +msgid "it's not safe to run badblocks!\n" +msgstr "Việc chạy tùy chọn khối hỏng (badblocks) là không an toàn !\n" + +#: misc/badblocks.c:796 misc/util.c:167 +#, c-format +msgid "%s is apparently in use by the system; " +msgstr "Hình như %s đang bị hệ thống dùng; " + +#: misc/badblocks.c:799 +msgid "badblocks forced anyway.\n" +msgstr "tùy chọn khối hỏng (badblocks) vẫn bị ép buộc.\n" + +#: misc/badblocks.c:861 +#, c-format +msgid "bad block size - %s" +msgstr "kích cỡ khối hỏng — %s" + +#: misc/badblocks.c:918 +#, c-format +msgid "can't allocate memory for test_pattern - %s" +msgstr "không thể cấp phát bộ nhớ cho mẫu thử (test_pattern) — %s" + +#: misc/badblocks.c:932 +#, c-format +msgid "invalid test_pattern: %s\n" +msgstr "mẫu thử (test_pattern) không hợp lệ: %s\n" + +#: misc/badblocks.c:948 +msgid "Maximum of one test_pattern may be specified in read-only mode" +msgstr "Trong chế độ chỉ đọc, có thể xác định tối đa một mẫu thử (test_pattern) thôi" + +#: misc/badblocks.c:954 +msgid "Random test_pattern is not allowed in read-only mode" +msgstr "Không cho phẹp mẫu thử (test_pattern) ngẫu nhiên trong chế độ chỉ đọc" + +#: misc/badblocks.c:968 +msgid "" +"Couldn't determine device size; you must specify\n" +"the size manually\n" +msgstr "" +"Không thể quyết định kích cỡ của thiết bị;\n" +"bạn phải tự xác định kích cỡ đó.\n" + +#: misc/badblocks.c:974 +msgid "while trying to determine device size" +msgstr "trong khi cố gắng quyết định kích cỡ của thiết bị" + +#: misc/badblocks.c:980 misc/mke2fs.c:1155 +#, c-format +msgid "invalid blocks count - %s" +msgstr "số đếm khối không hợp lệ — %s" + +#: misc/badblocks.c:989 +#, c-format +msgid "invalid starting block - %s" +msgstr "khối đầu không hợp lệ — %s" + +#: misc/badblocks.c:995 +#, c-format +msgid "invalid blocks range: %lu-%lu" +msgstr "phạm vị khối không hợp lệ: %lu - %lu" + +#: misc/badblocks.c:1050 +msgid "while creating in-memory bad blocks list" +msgstr "trong khi tạo danh sách các khối hỏng trong bộ nhớ" + +#: misc/badblocks.c:1065 +msgid "while adding to in-memory bad block list" +msgstr "trong khi thêm vào danh sách các khối hỏng trong bộ nhớ" + +#: misc/badblocks.c:1089 +#, c-format +msgid "Pass completed, %u bad blocks found.\n" +msgstr "Mới qua xong, tìm thấy %u khối hỏng.\n" + +#: misc/chattr.c:87 +#, c-format +msgid "Usage: %s [-RV] [-+=AacDdijsSu] [-v version] files...\n" +msgstr "Cách sử dụng: %s [-RV] [-+=AacDdijsSu] [-v phiên_bản] tập_tin...\n" + +#: misc/chattr.c:148 +#, c-format +msgid "bad version - %s\n" +msgstr "phiên bản sai — %s\n" + +#: misc/chattr.c:192 misc/lsattr.c:113 +#, c-format +msgid "while trying to stat %s" +msgstr "trong khi cố gắng lấy các thông tin về %s" + +#: misc/chattr.c:209 misc/chattr.c:225 +#, c-format +msgid "Flags of %s set as " +msgstr "Các cờ của %s được đặt thành " + +#: misc/chattr.c:218 +#, c-format +msgid "while reading flags on %s" +msgstr "trong khi đọc các cờ trên %s" + +#: misc/chattr.c:233 +#, c-format +msgid "while setting flags on %s" +msgstr "trong khi đặt các cờ trên %s" + +#: misc/chattr.c:238 +#, c-format +msgid "Version of %s set as %lu\n" +msgstr "Phiên bản %s được đặt thành %lu\n" + +#: misc/chattr.c:241 +#, c-format +msgid "while setting version on %s" +msgstr "trong khi đặt phiên bản trên %s" + +#: misc/chattr.c:255 +msgid "Couldn't allocate path variable in chattr_dir_proc" +msgstr "Không thể cấp phát biến đường dẫn trong chattr_dir_proc" + +#: misc/chattr.c:291 +msgid "= is incompatible with - and +\n" +msgstr "= không tương thích với - và +\n" + +#: misc/chattr.c:299 +msgid "Must use '-v', =, - or +\n" +msgstr "Phải dùng '-v', =, - hay +\n" + +#: misc/dumpe2fs.c:53 +#, c-format +msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n" +msgstr "Cách sử dụng: %s [-bfhixV] [-ob siêu_khối] [-oB cỡ_khối] thiết_bị\n" + +#: misc/dumpe2fs.c:131 +#, c-format +msgid "Group %lu: (Blocks " +msgstr "Nhóm %lu: (Khối " + +#: misc/dumpe2fs.c:136 +#, c-format +msgid " %s superblock at " +msgstr " %s siêu khối tại " + +#: misc/dumpe2fs.c:137 +msgid "Primary" +msgstr "Chính" + +#: misc/dumpe2fs.c:137 +msgid "Backup" +msgstr "Dự trữ" + +#: misc/dumpe2fs.c:141 +#, c-format +msgid ", Group descriptors at " +msgstr ", Mô tả nhóm tại " + +#: misc/dumpe2fs.c:145 +#, c-format +msgid "" +"\n" +" Reserved GDT blocks at " +msgstr "" +"\n" +" Các khối GDT đã dành riêng tại " + +#: misc/dumpe2fs.c:152 +#, c-format +msgid " Group descriptor at " +msgstr " Mô tả nhóm tại " + +#: misc/dumpe2fs.c:158 +msgid " Block bitmap at " +msgstr " Sơ đồ bit khối tại " + +#: misc/dumpe2fs.c:163 +msgid ", Inode bitmap at " +msgstr ", Sơ đồ nút inode tại " + +#: misc/dumpe2fs.c:168 +msgid "" +"\n" +" Inode table at " +msgstr "" +"\n" +" Bảng nút inode tại " + +#: misc/dumpe2fs.c:175 +#, c-format +msgid "" +"\n" +" %d free blocks, %d free inodes, %d directories\n" +msgstr "" +"\n" +" %d khối rảnh, %d inode rảnh, %d thư mục\n" + +#: misc/dumpe2fs.c:181 +msgid " Free blocks: " +msgstr " Khối rảnh: " + +#: misc/dumpe2fs.c:189 +msgid " Free inodes: " +msgstr " Inode rảnh: " + +#: misc/dumpe2fs.c:215 +msgid "while printing bad block list" +msgstr "trong khi in ra danh sách các khối hỏng" + +#: misc/dumpe2fs.c:221 +#, c-format +msgid "Bad blocks: %d" +msgstr "Khối hỏng: %d" + +#: misc/dumpe2fs.c:243 misc/tune2fs.c:232 +msgid "while reading journal inode" +msgstr "trong khi đọc nút inode nhật ký" + +#: misc/dumpe2fs.c:246 +msgid "Journal size: " +msgstr "Kích cỡ nhất ký: " + +#: misc/dumpe2fs.c:265 misc/tune2fs.c:154 +msgid "while reading journal superblock" +msgstr "trong khi đọc siêu khối nhật ký" + +#: misc/dumpe2fs.c:273 +msgid "Couldn't find journal superblock magic numbers" +msgstr "Không tìm thấy các số ma thuật siêu khối nhật ký" + +#: misc/dumpe2fs.c:277 +#, c-format +msgid "" +"\n" +"Journal block size: %u\n" +"Journal length: %u\n" +"Journal first block: %u\n" +"Journal sequence: 0x%08x\n" +"Journal start: %u\n" +"Journal number of users: %lu\n" +msgstr "" +"\n" +"Kích cỡ khối nhật ký: \t%u\n" +"Độ dài nhật ký: \t\t%u\n" +"Khối đầu nhật ký: \t\t%u\n" +"Dãy nhật ký: \t\t\t0x%08x\n" +"Đầu nhật ký: \t\t%u\n" +"Số người dùng nhật ký: \t%lu\n" + +#: misc/dumpe2fs.c:290 +#, c-format +msgid "Journal users: %s\n" +msgstr "Số người dùng nhật ký: %s\n" + +#: misc/dumpe2fs.c:345 misc/mke2fs.c:1099 +#, c-format +msgid "\tUsing %s\n" +msgstr "\tDùng %s\n" + +#: misc/dumpe2fs.c:371 misc/e2image.c:662 misc/tune2fs.c:779 resize/main.c:245 +#, c-format +msgid "Couldn't find valid filesystem superblock.\n" +msgstr "Không tìm thấy siêu khối hệ thống tập tin hợp lệ.\n" + +#: misc/dumpe2fs.c:382 +#, c-format +msgid "Note: This is a byte-swapped filesystem\n" +msgstr "Ghi chú : đây là hệ thống tập tin đã trao đổi byte\n" + +#: misc/dumpe2fs.c:401 +#, c-format +msgid "" +"\n" +"%s: %s: error reading bitmaps: %s\n" +msgstr "" +"\n" +"%s: %s: gặp lỗi khi đọc sơ đồ bit: %s\n" + +#: misc/e2image.c:50 +#, c-format +msgid "Usage: %s [-rsI] device image_file\n" +msgstr "Cách sử dụng: %s [-rsI] thiết_bị tập_tin_ảnh\n" + +#: misc/e2image.c:62 +msgid "Couldn't allocate header buffer\n" +msgstr "Không thể cấp phát bộ đệm phần đầu\n" + +#: misc/e2image.c:81 +#, c-format +msgid "short write (only %d bytes) for writing image header" +msgstr "ghi ngắn (chỉ %d byte) để ghi phần đầu ảnh" + +#: misc/e2image.c:100 +msgid "while writing superblock" +msgstr "trong khi ghi siêu khối" + +#: misc/e2image.c:108 +msgid "while writing inode table" +msgstr "trong khi ghi bảng nút inode" + +#: misc/e2image.c:115 +msgid "while writing block bitmap" +msgstr "trong khi ghi sơ đồ bit khối" + +#: misc/e2image.c:122 +msgid "while writing inode bitmap" +msgstr "trong khi ghi sơ đồ bit nút inode" + +#: misc/e2label.c:57 +#, c-format +msgid "e2label: cannot open %s\n" +msgstr "e2label: không thể mở %s\n" + +#: misc/e2label.c:62 +#, c-format +msgid "e2label: cannot seek to superblock\n" +msgstr "e2label: không thể tìm nơi tới siêu khối\n" + +#: misc/e2label.c:67 +#, c-format +msgid "e2label: error reading superblock\n" +msgstr "e2label: gặp lỗi khi đọc siêu khối\n" + +#: misc/e2label.c:71 +#, c-format +msgid "e2label: not an ext2 filesystem\n" +msgstr "e2label: không phải là hệ thống tập tin kiểu ext2\n" + +#: misc/e2label.c:96 misc/tune2fs.c:885 +#, c-format +msgid "Warning: label too long, truncating.\n" +msgstr "Cảnh báo : nhãn quá dài nên đang cắt ngắn.\n" + +#: misc/e2label.c:99 +#, c-format +msgid "e2label: cannot seek to superblock again\n" +msgstr "e2label: không thể tìm nơi lại tới siêu khối\n" + +#: misc/e2label.c:104 +#, c-format +msgid "e2label: error writing superblock\n" +msgstr "e2label: gặp lỗi khi ghi siêu khối\n" + +#: misc/e2label.c:116 misc/tune2fs.c:451 +#, c-format +msgid "Usage: e2label device [newlabel]\n" +msgstr "Cách sử dụng: e2label thiết_bị [nhãn_mới]\n" + +#: misc/fsck.c:346 +#, c-format +msgid "WARNING: couldn't open %s: %s\n" +msgstr "CẢNH BÁO : không thể mở %s: %s\n" + +#: misc/fsck.c:356 +#, c-format +msgid "WARNING: bad format on line %d of %s\n" +msgstr "CẢNH BÁO : gặp dạng thức sai trên dòng %d trên %s\n" + +#: misc/fsck.c:371 +msgid "" +"WARNING: Your /etc/fstab does not contain the fsck passno\n" +"\tfield. I will kludge around things for you, but you\n" +"\tshould fix your /etc/fstab file as soon as you can.\n" +"\n" +msgstr "" +"CẢNH BÁO : của bạn không chứa trường\n" +"\tpassno fsck. Trình này sẽ làm quấy quá các việc, nhưng\n" +"\tbạn nên sửa chữa tập tin càng sớm càng có thể.\n" +"\n" + +#: misc/fsck.c:472 +#, c-format +msgid "fsck: %s: not found\n" +msgstr "fsck: %s: không tìm thấy\n" + +#: misc/fsck.c:585 +#, c-format +msgid "%s: wait: No more child process?!?\n" +msgstr "%s: đợi: không có tiến trình con nữa ?!?\n" + +#: misc/fsck.c:607 +#, c-format +msgid "Warning... %s for device %s exited with signal %d.\n" +msgstr "Cảnh báo... %s cho thiết bị %s đã thoát với tín hiệu %d.\n" + +#: misc/fsck.c:613 +#, c-format +msgid "%s %s: status is %x, should never happen.\n" +msgstr "%s %s: trạng thái là %x, không bao giờ nên xảy ra.\n" + +#: misc/fsck.c:649 +#, c-format +msgid "Finished with %s (exit status %d)\n" +msgstr "Đã xong với %s (trạng thái thoát %d)\n" + +#: misc/fsck.c:709 +#, c-format +msgid "%s: Error %d while executing fsck.%s for %s\n" +msgstr "%s: Gặp lỗi %d trong khi thực hiện fsck.%s cho %s\n" + +#: misc/fsck.c:730 +msgid "" +"Either all or none of the filesystem types passed to -t must be prefixed\n" +"with 'no' or '!'.\n" +msgstr "" +"Hoặc tất cả hoặc không có kiểu hệ thống tập tin được gởi qua\n" +"cho tùy chọn « -t » phải có tiền tố « no » hay « ! ».\n" + +#: misc/fsck.c:749 +msgid "Couldn't allocate memory for filesystem types\n" +msgstr "Không thể cấp phát bộ nhớ cho kiểu hế thống tập tin\n" + +#: misc/fsck.c:889 +#, c-format +msgid "fsck: cannot check %s: fsck.%s not found\n" +msgstr "fsck: không thể kiểm tra %s: fsck.%s không được tìm thấy\n" + +#: misc/fsck.c:945 +msgid "Checking all file systems.\n" +msgstr "Đang kiểm tra mọi hệ thống tập tin.\n" + +#: misc/fsck.c:1031 +#, c-format +msgid "--waiting-- (pass %d)\n" +msgstr "--waiting-- (lần qua %d)\n" + +#: misc/fsck.c:1051 +msgid "Usage: fsck [-ANPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n" +msgstr "" +"Cách sử dụng: fsck [-ANPRTV] [ -C [ fd ] ] [-t kiểu_FS]\n" +"[tùy_chọn_FS] [FS ...]\n" +"(FS : hệ thống tập tin)\n" + +#: misc/fsck.c:1093 +#, c-format +msgid "%s: too many devices\n" +msgstr "%s: quá nhiều thiết bị\n" + +#: misc/fsck.c:1126 misc/fsck.c:1212 +#, c-format +msgid "%s: too many arguments\n" +msgstr "%s: quá nhiều đối số\n" + +#: misc/lsattr.c:73 +#, c-format +msgid "Usage: %s [-RVadlv] [files...]\n" +msgstr "Cách sử dụng: %s [-RVadlv] [tập_tin...]\n" + +#: misc/lsattr.c:83 +#, c-format +msgid "While reading flags on %s" +msgstr "Trong khi đọc các cờ trên %s" + +#: misc/lsattr.c:90 +#, c-format +msgid "While reading version on %s" +msgstr "Trong khi đọc phiên bản trên %s" + +#: misc/mke2fs.c:96 +#, c-format +msgid "" +"Usage: %s [-c|-t|-l filename] [-b block-size] [-f fragment-size]\n" +"\t[-i bytes-per-inode] [-j] [-J journal-options] [-N number-of-inodes]\n" +"\t[-m reserved-blocks-percentage] [-o creator-os] [-g blocks-per-group]\n" +"\t[-L volume-label] [-M last-mounted-directory] [-O feature[,...]]\n" +"\t[-r fs-revision] [-R options] [-qvSV] device [blocks-count]\n" +msgstr "" +"Cách sử dụng: %s [-c|-t|-l tên_tập_tin] [-b cỡ_khối] [-f cỡ_đoạn]\n" +"\t[-i byte_mỗi_inode] [-j] [-J tùy_chọn_nhật_ký] [-N số_inode]\n" +"\t[-m số_phần_trăm_khối_dành_riêng] [-o HĐH_tạo] [-g khối_mỗi_nhóm]\n" +"\t[-L nhãn_khối_tin] [-M thư_mục_lắp_cuối] [-O tính_năng[,...]]\n" +"\t[-r bản_sửa_đổi_FS] [-R tùy_chọn] [-qvSV] thiết_bị [số_đếm_khối]\n" +"(FS : hệ thống tập tin)\n" + +#: misc/mke2fs.c:195 +#, c-format +msgid "Running command: %s\n" +msgstr "Đang chạy lệnh: %s\n" + +#: misc/mke2fs.c:199 +#, c-format +msgid "while trying to run '%s'" +msgstr "trong khi cố gắng chạy « %s »" + +#: misc/mke2fs.c:206 +msgid "while processing list of bad blocks from program" +msgstr "trong khi xử lý danh sách các khối hỏng từ chương trình" + +#: misc/mke2fs.c:233 +#, c-format +msgid "Block %d in primary superblock/group descriptor area bad.\n" +msgstr "Khối %d trong vùng mô tả nhóm/siêu khối chính bị hỏng.\n" + +#: misc/mke2fs.c:235 +#, c-format +msgid "Blocks %u through %d must be good in order to build a filesystem.\n" +msgstr "" +"Các khối trong phạm vị %u đến %d phải là tốt\n" +"để xây dựng được hệ thống tập tin.\n" + +#: misc/mke2fs.c:238 +msgid "Aborting....\n" +msgstr "Hủy bỏ...\n" + +#: misc/mke2fs.c:258 +#, c-format +msgid "" +"Warning: the backup superblock/group descriptors at block %u contain\n" +"\tbad blocks.\n" +"\n" +msgstr "" +"Cảnh báo : các mô tả nhóm/siêu khối dự trữ tại khối %u chứa khối hỏng.\n" +"\n" + +#: misc/mke2fs.c:276 +msgid "while marking bad blocks as used" +msgstr "trong khi nhãn các khối hỏng như là đã được dùng" + +#: misc/mke2fs.c:334 +msgid "done \n" +msgstr "đã xong \n" + +#: misc/mke2fs.c:369 +msgid "while allocating zeroizing buffer" +msgstr "trong khi cấp phát bộ đếm làm số không" + +#: misc/mke2fs.c:410 +msgid "Writing inode tables: " +msgstr "Đang ghi các bảng nút inode: " + +#: misc/mke2fs.c:421 +#, c-format +msgid "" +"\n" +"Could not write %d blocks in inode table starting at %u: %s\n" +msgstr "" +"\n" +"Không thể ghi %d khối trong bảng nút inode, bắt đầu tại %u: %s\n" + +#: misc/mke2fs.c:444 +msgid "while creating root dir" +msgstr "trong khi tạo thư mục gốc" + +#: misc/mke2fs.c:451 +msgid "while reading root inode" +msgstr "trong khi đọc nút inode gốc" + +#: misc/mke2fs.c:460 +msgid "while setting root inode ownership" +msgstr "trong khi đặt quyền sở hữu nút inode gốc" + +#: misc/mke2fs.c:478 +msgid "while creating /lost+found" +msgstr "trong khi tạo /mất+tìm" + +#: misc/mke2fs.c:485 +msgid "while looking up /lost+found" +msgstr "trong khi trao tìm /mất+tìm" + +#: misc/mke2fs.c:495 +msgid "while expanding /lost+found" +msgstr "trong khi bung /mất+tìm" + +#: misc/mke2fs.c:511 +msgid "while setting bad block inode" +msgstr "trong khi đặt nút inode khối hỏng" + +#: misc/mke2fs.c:543 +#, c-format +msgid "Out of memory erasing sectors %d-%d\n" +msgstr "Hết bộ nhớ nên đang xoá bỏ các rãnh ghi trong phạm vị %d đến %d\n" + +#: misc/mke2fs.c:553 +#, c-format +msgid "Warning: could not read block 0: %s\n" +msgstr "Cảnh báo : không thể đọc khối 0: %s\n" + +#: misc/mke2fs.c:569 +#, c-format +msgid "Warning: could not erase sector %d: %s\n" +msgstr "Cảnh báo : không thể xoá bỏ rãnh ghi %d: %s\n" + +#: misc/mke2fs.c:585 +msgid "while initializing journal superblock" +msgstr "trong khi sở khởi siêu khối nhật ký" + +#: misc/mke2fs.c:591 +msgid "Zeroing journal device: " +msgstr "Đang làm số không thiết bị nhật ký: " + +#: misc/mke2fs.c:598 +#, c-format +msgid "while zeroing journal device (block %u, count %d)" +msgstr "trong khi làm số không thiết bị nhật ký (khối %u, số đếm %d)" + +#: misc/mke2fs.c:609 +msgid "while writing journal superblock" +msgstr "trong khi ghi siêu khối nhật ký" + +#: misc/mke2fs.c:625 +#, c-format +msgid "" +"warning: %u blocks unused.\n" +"\n" +msgstr "" +"cảnh báo : %u khối chưa dùng.\n" +"\n" + +#: misc/mke2fs.c:630 +#, c-format +msgid "Filesystem label=%s\n" +msgstr "Nhãn hệ thống tập tin=%s\n" + +#: misc/mke2fs.c:631 +msgid "OS type: " +msgstr "Kiểu HĐH: " + +#: misc/mke2fs.c:636 +#, c-format +msgid "Block size=%u (log=%u)\n" +msgstr "Cỡ khối=%u (bản ghi=%u)\n" + +#: misc/mke2fs.c:638 +#, c-format +msgid "Fragment size=%u (log=%u)\n" +msgstr "Cỡ đoạn=%u (bản ghi=%u)\n" + +#: misc/mke2fs.c:640 +#, c-format +msgid "%u inodes, %u blocks\n" +msgstr "%u inode, %u khối\n" + +#: misc/mke2fs.c:642 +#, c-format +msgid "%u blocks (%2.2f%%) reserved for the super user\n" +msgstr "%u khối (%2.2f%%) được dành riêng cho siêu người dùng\n" + +#: misc/mke2fs.c:645 +#, c-format +msgid "First data block=%u\n" +msgstr "Khối dữ liệu đầu=%u\n" + +#: misc/mke2fs.c:647 +#, c-format +msgid "Maximum filesystem blocks=%lu\n" +msgstr "Khối hệ thống tập tin tối đa=%lu\n" + +#: misc/mke2fs.c:652 +#, c-format +msgid "%u block groups\n" +msgstr "%u nhóm khối\n" + +#: misc/mke2fs.c:654 +#, c-format +msgid "%u block group\n" +msgstr "%u nhóm khối\n" + +#: misc/mke2fs.c:655 +#, c-format +msgid "%u blocks per group, %u fragments per group\n" +msgstr "%u khối trên mỗi nhóm, %u đoạn trên mỗi nhóm\n" + +#: misc/mke2fs.c:657 +#, c-format +msgid "%u inodes per group\n" +msgstr "%u nút inode trên mỗi nhóm\n" + +#: misc/mke2fs.c:664 +#, c-format +msgid "Superblock backups stored on blocks: " +msgstr "Siêu khối dự trữ được cất giữ trên khối: " + +#: misc/mke2fs.c:720 +#, c-format +msgid "Couldn't allocate memory to parse options!\n" +msgstr "Không thể cấp phát bộ nhớ để phân tách tùy chọn !\n" + +#: misc/mke2fs.c:744 +#, c-format +msgid "Invalid stride parameter: %s\n" +msgstr "Tham số stride không hợp lệ: %s\n" + +#: misc/mke2fs.c:765 +#, c-format +msgid "Invalid resize parameter: %s\n" +msgstr "Tham số thay đổi kích cỡ không hợp lệ: %s\n" + +#: misc/mke2fs.c:772 +#, c-format +msgid "The resize maximum must be greater than the filesystem size.\n" +msgstr "Số thay đổi kích cỡ tối đa phải là lớn hơn kích cỡ của hệ thống tập tin.\n" + +#: misc/mke2fs.c:803 +#, c-format +msgid "" +"\n" +"Bad options specified.\n" +"\n" +"Extended options are separated by commas, and may take an argument which\n" +"\tis set off by an equals ('=') sign.\n" +"\n" +"Valid extended options are:\n" +"\tstride=\n" +"\tresize=\n" +"\n" +msgstr "" +"\n" +"Tùy chọn sai đã được xác định.\n" +"\n" +"Các tùy chọn đã mở rộng có định giới bằng dấu phẩy, và có thể chấp nhận\n" +"đối số mà được ngụ ý bằng dấu bằng « = ».\n" +"\n" +"Tùy chọn đã mở rộng hợp lệ:\n" +"\tstride=<độ dài stride theo khối>\n" +"\tresize=\n" +"\n" + +#: misc/mke2fs.c:828 +#, c-format +msgid "" +"Syntax error in mke2fs config file (%s, line #%d)\n" +"\t%s\n" +msgstr "" +"Gặp lỗi cú pháp trong tập tin cấu hình mke2fs (%s, dòng số %d)\n" +"\t%s\n" + +#: misc/mke2fs.c:841 misc/tune2fs.c:303 +#, c-format +msgid "Invalid filesystem option set: %s\n" +msgstr "Có đặt tùy chọn hệ thống tập tin không hợp lệ: %s\n" + +#: misc/mke2fs.c:938 +#, c-format +msgid "invalid block size - %s" +msgstr "Cỡ khối không hợp lệ — %s" + +#: misc/mke2fs.c:942 +#, c-format +msgid "Warning: blocksize %d not usable on most systems.\n" +msgstr "Cảnh báo : kích cỡ khối %d vô ích trên phần lớn hệ thống.\n" + +#: misc/mke2fs.c:959 +#, c-format +msgid "invalid fragment size - %s" +msgstr "Kích cỡ đoạn không hợp lệ — %s" + +#: misc/mke2fs.c:965 +#, c-format +msgid "Warning: fragments not supported. Ignoring -f option\n" +msgstr "Cảnh báo : không hỗ trợ đoạn nên bỏ qua tùy chọn « -f »\n" + +#: misc/mke2fs.c:972 +msgid "Illegal number for blocks per group" +msgstr "Số cấm cho số khối trên mỗi nhóm" + +#: misc/mke2fs.c:977 +msgid "blocks per group must be multiple of 8" +msgstr "số khối trên mỗi nhóm phải là bội số cho 8" + +#: misc/mke2fs.c:987 +#, c-format +msgid "invalid inode ratio %s (min %d/max %d)" +msgstr "Tỷ lệ nút inode không hợp lệ %s (thiểu %d/đa %d)" + +#: misc/mke2fs.c:1004 +msgid "in malloc for bad_blocks_filename" +msgstr "" +"trong hàm cấp phát bộ nhớ malloc cho tên tập tin khối hỏng\n" +"« bad_blocks_filename »" + +#: misc/mke2fs.c:1013 +#, c-format +msgid "invalid reserved blocks percent - %s" +msgstr "phần trăm khối được dành riêng không hợp lệ — %s" + +#: misc/mke2fs.c:1031 +#, c-format +msgid "bad revision level - %s" +msgstr "cấp bản sửa đổi sai — %s" + +#: misc/mke2fs.c:1044 +#, c-format +msgid "invalid inode size - %s" +msgstr "kích cỡ nút inode không hợp lệ — %s" + +#: misc/mke2fs.c:1065 +#, c-format +msgid "bad num inodes - %s" +msgstr "số (num) nút inode sai — %s" + +#: misc/mke2fs.c:1123 misc/mke2fs.c:1588 +#, c-format +msgid "while trying to open journal device %s\n" +msgstr "trong khi cố gắng mở thiết bị nhật ký %s\n" + +#: misc/mke2fs.c:1129 +#, c-format +msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n" +msgstr "Kích cỡ của thiết bị nhật ký (%d) có nhỏ hơn kích cỡ tối thiểu là %d\n" + +#: misc/mke2fs.c:1143 +#, c-format +msgid "%d-byte blocks too big for system (max %d)" +msgstr "Khối %d-byte quá lớn đối với hệ thống (tối đa %d)" + +#: misc/mke2fs.c:1147 +#, c-format +msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n" +msgstr "" +"Cảnh báo : khối %d-byte quá lớn đối với hệ thống (tối đa %d)\n" +"nên bị buộc tiếp tục\n" + +#: misc/mke2fs.c:1165 +msgid "filesystem" +msgstr "hệ thống tập tin" + +#: misc/mke2fs.c:1188 resize/main.c:279 +msgid "while trying to determine filesystem size" +msgstr "trong khi cố gắng quyết định kích cỡ của hệ thống tập tin" + +#: misc/mke2fs.c:1194 +msgid "" +"Couldn't determine device size; you must specify\n" +"the size of the filesystem\n" +msgstr "" +"Không thể quyết định kích cỡ của thiết bị;\n" +"bạn phải xác định kích cỡ của hệ thống tập tin\n" + +#: misc/mke2fs.c:1201 +msgid "" +"Device size reported to be zero. Invalid partition specified, or\n" +"\tpartition table wasn't reread after running fdisk, due to\n" +"\ta modified partition being busy and in use. You may need to reboot\n" +"\tto re-read your partition table.\n" +msgstr "" +"Kích cỡ của thiết bị được thông báo là số không.\n" +"\tPhân vùng không hợp lệ được xác định,\n" +"\thoặc bảng phân vùng đã không được đọc lại\n" +"\tsau khi chạy tiến trình fdisk,\n" +"\tdo phân vùng đã sửa đổi đang bận và đang được dùng.\n" +"Có lẽ bạn cần phải khởi động lại máy để đọc lại bảng phân vùng.\n" + +#: misc/mke2fs.c:1219 +msgid "Filesystem larger than apparent device size." +msgstr "Hệ thống tập tin lớn hơn kích cỡ thiết bị biểu kiến." + +#: misc/mke2fs.c:1238 +#, c-format +msgid "Filesystem features not supported with revision 0 filesystems\n" +msgstr "" +"Tính năng hệ thống tập tin không được hỗ trợ với hệ thống tập tin\n" +"kiểu bản sửa đổi 0\n" + +#: misc/mke2fs.c:1297 +msgid "while trying to determine hardware sector size" +msgstr "trong khi cố gắng quyết định kích cỡ của rãnh ghi phần cứng" + +#: misc/mke2fs.c:1349 +msgid "reserved online resize blocks not supported on non-sparse filesystem" +msgstr "" +"khối thay đổi kích cỡ trực tuyến được dành riêng không được hỗ trợ\n" +"trên hệ thống tập tin không phải thưa thớt" + +#: misc/mke2fs.c:1358 +msgid "blocks per group count out of range" +msgstr "số khối trên mỗi nhóm ở ngoài phạm vi" + +#: misc/mke2fs.c:1365 +msgid "" +"Filesystem too large. No more than 2**31-1 blocks\n" +"\t (8TB using a blocksize of 4k) are currently supported." +msgstr "" +"Hệ thống tập tin quá lớn. Hiện thời hỗ trợ kích cỡ\n" +"\ttối đa 2**31-1 (8 TB theo kích cỡ khối 4k)." + +#: misc/mke2fs.c:1372 +#, c-format +msgid "" +"\n" +"Warning: some 2.4 kernels do not support blocksizes greater than 4096\n" +"\tusing ext3. Use -b 4096 if this is an issue for you.\n" +"\n" +msgstr "" +"\n" +"Cảnh báo : một số hạt nhân phiên bản 2.4 không hỗ trợ kích cỡ khối\n" +"\tlớn hơn 4096, dùng ext3. Hãy dùng tùy chọn « -b 4096 »\n" +"\tnếu bặn gặp khó khăn này.\n" +"\n" + +#: misc/mke2fs.c:1381 +#, c-format +msgid "invalid inode size %d (min %d/max %d)" +msgstr "kích cỡ nút inode không hợp lệ %d (thiểu %d/đa %d)" + +#: misc/mke2fs.c:1387 +#, c-format +msgid "Warning: %d-byte inodes not usable on most systems\n" +msgstr "Cảnh báo : nút inode kiểu %d-byte là vô ích trên phần lớn hệ thống\n" + +# Item in the main menu to select this package +#: misc/mke2fs.c:1438 +msgid "while setting up superblock" +msgstr "trong khi thiết lập siêu khối" + +#: misc/mke2fs.c:1472 +#, c-format +msgid "unknown os - %s" +msgstr "không biết hệ điều hành — %s" + +#: misc/mke2fs.c:1526 +msgid "while trying to allocate filesystem tables" +msgstr "trong khi cố gắng cấp phát các bảng hệ thống tập tin" + +#: misc/mke2fs.c:1557 +#, c-format +msgid "while zeroing block %u at end of filesystem" +msgstr "trong khi làm số không khối %u tại kết thúc của hệ thống tập tin" + +#: misc/mke2fs.c:1570 +msgid "while reserving blocks for online resize" +msgstr "trong khi dành riêng các khối để thay đổi kích cỡ trực tuyến" + +#: misc/mke2fs.c:1581 misc/tune2fs.c:388 +msgid "journal" +msgstr "nhật ký" + +#: misc/mke2fs.c:1593 +#, c-format +msgid "Adding journal to device %s: " +msgstr "Đang thêm nhật ký vào thiết bị %s: " + +#: misc/mke2fs.c:1600 +#, c-format +msgid "" +"\n" +"\twhile trying to add journal to device %s" +msgstr "" +"\n" +"trong khi cố gắng thêm nhật ký vào thiết bị %s" + +#: misc/mke2fs.c:1605 misc/mke2fs.c:1631 misc/tune2fs.c:416 misc/tune2fs.c:430 +#, c-format +msgid "done\n" +msgstr "đã xong\n" + +#: misc/mke2fs.c:1619 +#, c-format +msgid "Creating journal (%d blocks): " +msgstr "Đang tạo nhật ký (%d khối): " + +#: misc/mke2fs.c:1627 +msgid "" +"\n" +"\twhile trying to create journal" +msgstr "" +"\n" +"trong khi cố gắng tạo nhật ký" + +#: misc/mke2fs.c:1636 +#, c-format +msgid "Writing superblocks and filesystem accounting information: " +msgstr "Đang ghi siêu khối và thông tin kế toán hệ thống tập tin: " + +#: misc/mke2fs.c:1641 +#, c-format +msgid "" +"\n" +"Warning, had trouble writing out superblocks." +msgstr "" +"\n" +"Cảnh báo : gặp khó khăn trong việc ghi ra các siêu khối." + +#: misc/mke2fs.c:1644 +#, c-format +msgid "" +"done\n" +"\n" +msgstr "" +"đã xong\n" +"\n" + +#: misc/mklost+found.c:49 +#, c-format +msgid "Usage: mklost+found\n" +msgstr "Cách sử dụng: mklost+found\n" + +#: misc/tune2fs.c:78 +msgid "Please run e2fsck on the filesystem.\n" +msgstr "Hãy chạy tiến trình e2fsck trên hệ thống tập tin đó.\n" + +#: misc/tune2fs.c:85 +#, c-format +msgid "" +"Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n" +"\t[-i interval[d|m|w]] [-j] [-J journal_options]\n" +"\t[-l] [-s sparse_flag] [-m reserved_blocks_percent]\n" +"\t[-o [^]mount_options[,...]] [-r reserved_blocks_count]\n" +"\t[-u user] [-C mount_count] [-L volume_label] [-M last_mounted_dir]\n" +"\t[-O [^]feature[,...]] [-T last_check_time] [-U UUID] device\n" +msgstr "" +"Cách sử dụng: %s [-c tổng_lắp_tối_đa] [-e ứng_xử_lỗi] [-g nhóm]\n" +"\t[-i khoảng[d|m|w]] [-j] [-J tùy_chọn_nhật_ký]\n" +"\t[-l] [-s cờ_thưa_thớt] [-m phần_trăm_khối_dành_riêng]\n" +"\t[-o [^]tùy_chọn_lắp[,...]] [-r tổng_khối_dành_riêng]\n" +"\t[-u người_dùng] [-C tổng_lắp] [-L nhãn_khối_tin] [-M thư_mục_lắp_cuối_cùng]\n" +"\t[-O [^]tính_năng[,...]] [-T giờ_kiểm_tra_cuối_cùng] [-U UUID] thiết_bị\n" + +#: misc/tune2fs.c:142 +msgid "while trying to open external journal" +msgstr "trong khi cố gắng mở nhật ký bên ngoài" + +#: misc/tune2fs.c:146 +#, c-format +msgid "%s is not a journal device.\n" +msgstr "%s không phải là thiết bị nhật ký.\n" + +#: misc/tune2fs.c:161 +msgid "Journal superblock not found!\n" +msgstr "Không tìm thấy siêu khối nhật ký !\n" + +#: misc/tune2fs.c:173 +msgid "Filesystem's UUID not found on journal device.\n" +msgstr "Không tìm thấy UUID của hệ thống tập tin trên thiết bị nhật ký.\n" + +#: misc/tune2fs.c:194 +msgid "Journal NOT removed\n" +msgstr "CHƯA gỡ bỏ nhật ký\n" + +#: misc/tune2fs.c:200 +msgid "Journal removed\n" +msgstr "Nhật ký đã được gỡ bỏ\n" + +#: misc/tune2fs.c:239 +msgid "while reading bitmaps" +msgstr "trong khi đọc các sơ đồ bit" + +#: misc/tune2fs.c:246 +msgid "while clearing journal inode" +msgstr "trong khi xoá nút inode nhật ký" + +#: misc/tune2fs.c:257 +msgid "while writing journal inode" +msgstr "trong khi ghi nút inode nhật ký" + +#: misc/tune2fs.c:272 +#, c-format +msgid "Invalid mount option set: %s\n" +msgstr "Tùy chọn lắp không hợp lệ đã được đặt: %s\n" + +#: misc/tune2fs.c:318 +msgid "" +"The has_journal flag may only be cleared when the filesystem is\n" +"unmounted or mounted read-only.\n" +msgstr "" +"Cờ có nhật ký (has_journal) có thể được xoá\n" +"chỉ khi hệ thống tập tin đã được tháo gắn kết\n" +"hay đã được gắn kết một cách chỉ đọc.\n" + +#: misc/tune2fs.c:326 +msgid "" +"The needs_recovery flag is set. Please run e2fsck before clearing\n" +"the has_journal flag.\n" +msgstr "" +"Cờ cần thiết phục hồi (needs_recovery) đã được đặt.\n" +"Hãy chạy tiến trình e2fsck trước khi xoá cờ có nhật ký (has_journal).\n" + +#: misc/tune2fs.c:383 +msgid "The filesystem already has a journal.\n" +msgstr "Hệ thống tập tin đã có nhật ký.\n" + +#: misc/tune2fs.c:400 +#, c-format +msgid "" +"\n" +"\twhile trying to open journal on %s\n" +msgstr "" +"\n" +"trong khi cố gắng mở nhật ký trên %s\n" + +#: misc/tune2fs.c:404 +#, c-format +msgid "Creating journal on device %s: " +msgstr "Đang tạo nhật ký trên thiết bị %s: " + +#: misc/tune2fs.c:412 +#, c-format +msgid "while adding filesystem to journal on %s" +msgstr "trong khi thêm hệ thống tập tin vào nhật ký trên %s" + +#: misc/tune2fs.c:418 +msgid "Creating journal inode: " +msgstr "Đang tạo nút inode nhật ký: " + +#: misc/tune2fs.c:427 +msgid "" +"\n" +"\twhile trying to create journal file" +msgstr "" +"\n" +"trong khi cố gắng tạo tập tin nhật ký" + +#: misc/tune2fs.c:493 +#, c-format +msgid "Couldn't parse date/time specifier: %s" +msgstr "Không thể phân tách toán tử ngày/giờ : %s" + +#: misc/tune2fs.c:515 misc/tune2fs.c:528 +#, c-format +msgid "bad mounts count - %s" +msgstr "tổng lắp sai — %s" + +#: misc/tune2fs.c:544 +#, c-format +msgid "bad error behavior - %s" +msgstr "ứng xử lỗi sai — %s" + +#: misc/tune2fs.c:567 +#, c-format +msgid "bad gid/group name - %s" +msgstr "GID/tên nhóom sai — %s" + +#: misc/tune2fs.c:600 +#, c-format +msgid "bad interval - %s" +msgstr "khoảng sai - %s" + +#: misc/tune2fs.c:628 +#, c-format +msgid "bad reserved block ratio - %s" +msgstr "tỷ lệ khối dành riêng sai — %s" + +#: misc/tune2fs.c:643 +msgid "-o may only be specified once" +msgstr "có thể xác định tùy chọn « -o » chỉ một lần thôi" + +#: misc/tune2fs.c:653 +msgid "-O may only be specified once" +msgstr "có thể xác định tùy chọn « -O » chỉ một lần thôi" + +#: misc/tune2fs.c:663 +#, c-format +msgid "bad reserved blocks count - %s" +msgstr "tổng khối dành riêng sai — %s" + +#: misc/tune2fs.c:692 +#, c-format +msgid "bad uid/user name - %s" +msgstr "UID/tên người dùng sai — %s" + +#: misc/tune2fs.c:802 +#, c-format +msgid "Setting maximal mount count to %d\n" +msgstr "Đang đặt tổng lắp tối đa thành %d\n" + +#: misc/tune2fs.c:808 +#, c-format +msgid "Setting current mount count to %d\n" +msgstr "Đang đặt tổng lắp hiện thời thành %d\n" + +#: misc/tune2fs.c:813 +#, c-format +msgid "Setting error behavior to %d\n" +msgstr "Đang đặt ứng xử lỗi thành %d\n" + +#: misc/tune2fs.c:818 +#, c-format +msgid "Setting reserved blocks gid to %lu\n" +msgstr "Đang đặt GID khối dành riêng thành %lu\n" + +#: misc/tune2fs.c:823 +#, c-format +msgid "Setting interval between checks to %lu seconds\n" +msgstr "Đang đặt khoảng giữa hai lần kiểm tra thành %lu giây\n" + +#: misc/tune2fs.c:828 +#, c-format +msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n" +msgstr "Đang đặt phần trăm khối dành riêng thành %g%% (%u khối)\n" + +#: misc/tune2fs.c:834 +#, c-format +msgid "reserved blocks count is too big (%lu)" +msgstr "tông khối dành riêng là quá lớn (%lu)" + +#: misc/tune2fs.c:840 +#, c-format +msgid "Setting reserved blocks count to %lu\n" +msgstr "Đang đặt tổng khối dành riêng thành %lu\n" + +#: misc/tune2fs.c:846 +msgid "" +"\n" +"The filesystem already has sparse superblocks.\n" +msgstr "" +"\n" +"Hệ thống tập tin đã có siêu khối thưa thớt.\n" + +#: misc/tune2fs.c:853 +#, c-format +msgid "" +"\n" +"Sparse superblock flag set. %s" +msgstr "" +"\n" +"Cờ siêu khối thưa thớt đã được đặt. %s" + +#: misc/tune2fs.c:860 +msgid "" +"\n" +"The filesystem already has sparse superblocks disabled.\n" +msgstr "" +"\n" +"Hệ thống tập tin đã tắt khả năng siêu khối thưa thớt.\n" + +#: misc/tune2fs.c:868 +#, c-format +msgid "" +"\n" +"Sparse superblock flag cleared. %s" +msgstr "" +"\n" +"Cờ siêu khối thưa thớt đã được xoá. %s" + +#: misc/tune2fs.c:875 +#, c-format +msgid "Setting time filesystem last checked to %s\n" +msgstr "Đang đặt giờ kiểm tra hệ thống tập tin lần cuối cùng thành %s\n" + +#: misc/tune2fs.c:881 +#, c-format +msgid "Setting reserved blocks uid to %lu\n" +msgstr "Đang đặt UID khối dành riêng thành %lu\n" + +#: misc/tune2fs.c:914 +msgid "Invalid UUID format\n" +msgstr "Dạng thức UUID không hợp lệ\n" + +#: misc/util.c:72 +msgid "Proceed anyway? (y,n) " +msgstr "Vẫn còn tiếp tục không? (c,k)" + +#: misc/util.c:93 +#, c-format +msgid "Could not stat %s --- %s\n" +msgstr "Không thể lấy các thông tin về %s — %s\n" + +#: misc/util.c:96 +msgid "" +"\n" +"The device apparently does not exist; did you specify it correctly?\n" +msgstr "" +"\n" +"Hình như thiết bị đó không tồn tại; bạn có xác định đúng nó chưa?\n" + +#: misc/util.c:107 +#, c-format +msgid "%s is not a block special device.\n" +msgstr "%s không phải là thiết bị đặc biệt khối.\n" + +#: misc/util.c:136 +#, c-format +msgid "%s is entire device, not just one partition!\n" +msgstr "%s là toàn bộ thiết bị, không phải chỉ một phân vùng !\n" + +#: misc/util.c:158 +msgid "mke2fs forced anyway. Hope /etc/mtab is incorrect.\n" +msgstr "Tiến trình mke2fs vẫn còn bị ép buộc. Mong là không đúng.\n" + +#: misc/util.c:163 +#, c-format +msgid "will not make a %s here!\n" +msgstr "sẽ không làm %s ở đây !\n" + +#: misc/util.c:170 +msgid "mke2fs forced anyway.\n" +msgstr "Tiến trình mke2fs vẫn còn bị ép buộc.\n" + +#: misc/util.c:186 +msgid "Couldn't allocate memory to parse journal options!\n" +msgstr "Không thể cấp phát bộ nhớ để phân tách các tùy chọn nhật ký !\n" + +#: misc/util.c:228 +msgid "" +"\n" +"Bad journal options specified.\n" +"\n" +"Journal options are separated by commas, and may take an argument which\n" +"\tis set off by an equals ('=') sign.\n" +"\n" +"Valid journal options are:\n" +"\tsize=\n" +"\tdevice=\n" +"\n" +"The journal size must be between 1024 and 102400 filesystem blocks.\n" +"\n" +msgstr "" +"\n" +"Tùy chọn nhật ký sai đã được xác định.\n" +"\n" +"Các tùy chọn nhật ký có định giới bằng dấu phẩy, và có thể chấp nhận\n" +"đối số mà được ngụ ý bằng dấu bằng « = ».\n" +"\n" +"Tùy chọn nhật ký hợp lệ:\n" +"\tsize=\n" +"\tdevice=\n" +"\n" +"Kích cỡ của nhật ký phải nằm trong phạm vị\n" +"1024 đến 102400 khối hệ thống tập tin.\n" +"\n" + +#: misc/util.c:255 +msgid "" +"\n" +"Filesystem too small for a journal\n" +msgstr "" +"\n" +"Hệ thống tập tin quá nhỏ đối với nhật ký\n" + +#: misc/util.c:262 +#, c-format +msgid "" +"\n" +"The requested journal size is %d blocks; it must be\n" +"between 1024 and 102400 blocks. Aborting.\n" +msgstr "" +"\n" +"Kích cỡ nhật ký đã yêu cầu là %d khối;\n" +"nó phải nằm trong phạm vị 1024 đến 102400 khối\n" +"nên hủy bỏ.\n" + +#: misc/util.c:270 +msgid "" +"\n" +"Journal size too big for filesystem.\n" +msgstr "" +"\n" +"Kích cỡ nhật ký quá lớn đối với hệ thống tập tin.\n" + +#: misc/util.c:294 +#, c-format +msgid "" +"This filesystem will be automatically checked every %d mounts or\n" +"%g days, whichever comes first. Use tune2fs -c or -i to override.\n" +msgstr "" +"Hệ thống tập tin này sẽ được kiểm tra tự động mỗi %d lần gắn kết\n" +"hay mỗi %g ngày, điều nào xảy ra trước. Hãy dùng tùy chọn\n" +"« tune2fs -c » hay « tune2fs -i » để được quyền cao hơn.\n" + +#: misc/uuidgen.c:30 +#, c-format +msgid "Usage: %s [-r] [-t]\n" +msgstr "Cách sử dụng: %s [-r] [-t]\n" + +#: resize/extent.c:196 +msgid "# Extent dump:\n" +msgstr "# Đổ khoảng:\n" + +#: resize/extent.c:197 +#, c-format +msgid "#\tNum=%d, Size=%d, Cursor=%d, Sorted=%d\n" +msgstr "#\tSố=%d, Cỡ=%d, Con trỏ=%d, Sắp xếp=%d\n" + +#: resize/extent.c:200 +#, c-format +msgid "#\t\t %u -> %u (%d)\n" +msgstr "#\t\t %u -> %u (%d)\n" + +#: resize/main.c:39 +#, c-format +msgid "" +"Usage: %s [-d debug_flags] [-f] [-F] [-p] device [new_size]\n" +"\n" +msgstr "" +"Cách sử dụng: %s [-d cờ_gỡ_lỗi] [-f] [-F] [-p] thiết_bị [kích_cỡ_mới]\n" +"\n" + +#: resize/main.c:61 +msgid "Extending the inode table" +msgstr "Đang mở rộng bảng nút inode" + +#: resize/main.c:64 +msgid "Relocating blocks" +msgstr "Đang định vị lại các khối" + +#: resize/main.c:67 +msgid "Scanning inode table" +msgstr "Đang quét bảng nút inode" + +#: resize/main.c:70 +msgid "Updating inode references" +msgstr "Đang cập nhật các tham chiếu nút inode" + +#: resize/main.c:73 +msgid "Moving inode table" +msgstr "Đang di chuyển bảng nút inode" + +#: resize/main.c:76 +msgid "Unknown pass?!?" +msgstr "Lần qua không rõ ?!?" + +#: resize/main.c:79 +#, c-format +msgid "Begin pass %d (max = %lu)\n" +msgstr "Chạy lần qua %d (tối đa = %lu)\n" + +#: resize/main.c:200 +#, c-format +msgid "while opening %s" +msgstr "trong khi mở %s" + +#: resize/main.c:212 +#, c-format +msgid "while getting stat information for %s" +msgstr "trong khi lấy các thông tin về %s" + +#: resize/main.c:286 +#, c-format +msgid "bad filesystem size - %s" +msgstr "kích cỡ hệ thống tập tin sai — %s" + +#: resize/main.c:313 +#, c-format +msgid "" +"The containing partition (or device) is only %u (%dk) blocks.\n" +"You requested a new size of %u blocks.\n" +"\n" +msgstr "" +"Phân vùng (hay thiết bị) chứa là chỉ %u (%dk) khối thôi.\n" +"Bạn đã yêu cầu kích cỡ mới là %u khối.\n" +"\n" + +#: resize/main.c:320 +#, c-format +msgid "" +"The filesystem is already %u blocks long. Nothing to do!\n" +"\n" +msgstr "" +"Hệ thống tập tin đã có độ dài %u khối. Không có gì cần làm !\n" +"\n" + +#: resize/main.c:331 +#, c-format +msgid "" +"Please run 'e2fsck -f %s' first.\n" +"\n" +msgstr "Hãy chạy tiến trình « e2fsck -f %s » trước đó.\n" + +#: resize/main.c:342 +#, c-format +msgid "while trying to resize %s" +msgstr "trong khi cố gắng thay đổi kích cỡ %s" + +#: resize/main.c:347 +#, c-format +msgid "" +"The filesystem on %s is now %u blocks long.\n" +"\n" +msgstr "" +"Hệ thống tập tin nằm trên %s bây giờ có độ dài %u khối.\n" +"\n" + +#: resize/resize2fs.c:638 +msgid "reserved blocks" +msgstr "khối dành riêng" + +#: resize/resize2fs.c:643 +msgid "blocks to be moved" +msgstr "khối cần di chuyển" + +#: resize/resize2fs.c:648 +msgid "meta-data blocks" +msgstr "khối siêu dữ liệu" + +#: resize/resize2fs.c:1528 +#, c-format +msgid "Should never happen: resize inode corrupt!\n" +msgstr "Không bao giờ nên xảy ra: nút inode thay đổi kích cỡ bị hỏng !\n" diff -Nru e2fsprogs-1.39/RELEASE-NOTES e2fsprogs-1.39-tyt1/RELEASE-NOTES --- e2fsprogs-1.39/RELEASE-NOTES 2006-05-29 11:24:33.000000000 -0400 +++ e2fsprogs-1.39-tyt1/RELEASE-NOTES 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,115 @@ +E2fsprogs 1.40-WIP (October 2, 2006) +==================================== + +Fixed overflow and signed/unsigned problems caused by the number of +blocks or inodes exceeding 2**31 or being close to 2**32-1;. + +Fix resize2fs so that it gives user-intelligible error messages if the +filesystem or the kernel does not support on-line resizing. +(Addresses Debian Bug: #380548) + +Require mke2fs -F -F for really dangerous operations, since -F is +needed for less dangerous operations such as creating filesystems +images in regular files, or creating filesystems on whole block +devices. These relatively innocuous usages should NOT be confused +with running mke2fs on an apparently-mounted or in-use filesystem. + +Allow the default inode size to be specified into the mke2fs.conf +file. + +Make the smallest default journal size is big enough so that on-line +resizing should always work. + +Fix silly spelling error in e2fsck. (Addresses SourceForge bug: +#1531372) + +Fix debugfs coredump when lsdel is run without an open filesystem +(Addresses Debian Bug: #378335) + +Fix debugfs display bug us that bytes that have the high bit set are +displayed as "ec" instead of "ffffffec". + +Add support in lsattr so it will display the EXT4_EXTENTS_FL flag. + +Device mapper scanning wasn't working in the blkid library because the +pathnames had an extra "/dev" when they were being probed. + +Add GFS/GFS2 support to the blkid library. + +Fix blkid support of empty FAT filesystem labels. + +Avoid recursing forever (or for a long time) when the blkid library +searches for a device and there are symlinks to directories in /dev. + +Avoid unaligned halfword access in blkid when accessing FAT +superblocks, as this will cause Sparc/Solaris systems to throw a +SIGBUS error. + +The latest devmapper libraries requires pthreads, add -lpthreads to +the static link libraries for e2fsck.static if devmapper is enabled. +(Addresses Debian bug: #388718) + +Improve the (non-installed, for experts only) findsuper program by +printing the uuid and label from the superblocks, as well as the +starting and ending offsets of the filesystem given the information in +the superblock. Omit by default printing superblocks that are likely +found in located in an ext3 journal unless an explicit -j option is +given. + +Updated French and Dutch translations and added Vietnamese translation. + +Use FreeBSD's DIOCGMEDIASIZE and DIOCGDINFO ioctls if available when +determining a partition's size, since binary searching to determine +the device doesn't work on FreeBSD. + +Fixed spelling mistakes, typos, and otherwise clarified man pages. +(Addresses Debian Bug: #369761, #373004) + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs #389554, #390664) + + +Programmer's notes: +------------------- + +Fix misc/Makefile.in so that it builds even if e2fsck hasn't been built yet +(Addresses Sourceforge Bug: #1565561) + +Remove unused variables and other lint/gcc -Wall cleanups + +Add check to ext2fs_get_device_size() so it will return EFBIG for for +filesystems contained in regular files where the filesystem image size +is returned by stat64(). + +Added the 64-bit byte swapping function ext2fs_swab64(). + +Added two new helper functions to prevent 2**31/2**32-1 overflow +problems: ext2fs_div_ceil() and e2p_percent(). + +Create new ext2fs library inline functions ext2fs_group_first_block() +and ext2fs_group_last_block() in order to calculate the starting and +ending blocks in a block group. + +Create the generated files read-only to remind developers not to edit them. + +Added an "make rpm" target to top-level Makefile + +Added various FreeBSD portability fixes. + +Exclude mercurial files from the RPM build tree to speed up copy/build. + +Use root_sysconfdir to define the locations of mke2fs.conf and +e2fsck.conf instead of using a hard-coded /etc pathname. + +Prevent e2fsck.h and ext2_ext_attr.h from getting included multiple times. + +Fixed "make clean" in blkid's Makefile.in file from removing tst_*.c files. + +If diff -u is supported, use it to report test failures. + +Updates/improvements to RPM spec file + + E2fsprogs 1.39 (May 29, 2006) ============================= diff -Nru e2fsprogs-1.39/resize/ChangeLog e2fsprogs-1.39-tyt1/resize/ChangeLog --- e2fsprogs-1.39/resize/ChangeLog 2006-05-22 17:54:13.000000000 -0400 +++ e2fsprogs-1.39-tyt1/resize/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,43 @@ +2006-10-01 Theodore Tso + + * online.c (online_resize_fs): Check to make sure the filesystem + has a resize inode if it is needed to grow the filesystem. + Print the correct error message if the kernel returns an + ENOTTY error to the group extend ioctl. + (Addresses Debian bug #380548) + +2006-08-30 Eric Sandeen + + * online.c (online_resize_fs): use div_ceil for r_frac calculation. + * resize2fs.c (adjust_fs_info): avoid overflow in blk calculation + when figuring new reserved blocks count. + +2006-08-30 Eric Sandeen + + * resize2fs.c (adjust_fs_info): Disallow > 2^32 indoes at resize time. + +2006-08-30 Eric Sandeen + + * online.c (online_resize_fs): Fix printf formats. + +2006-08-30 Eric Sandeen + + * resize2fs.c (mark_table_blocks): Remove unused variable. + +2006-08-30 Theodore Tso + + * resize2fs.c (adjust_fs_info), online.c (online_resize_fs): Use + e2p_percent to properly calculate the number of reserved + blocks without worrying about overflow. + + * resize2fs.c (ext2fs_calculate_summary_stats): Fix potential + overflow problems when the number of blocks is close to + 2**31. + + * resize2fs.c (adjust_fs_info): Use ext2fs_div_ceil() instead of a + using an open-coded expression which was subject to + overflows. + 2006-05-22 Theodore Tso * resize2fs.8.in: Fixed spelling mistake (Addresses Debian Bug: diff -Nru e2fsprogs-1.39/resize/online.c e2fsprogs-1.39-tyt1/resize/online.c --- e2fsprogs-1.39/resize/online.c 2006-03-17 19:43:52.000000000 -0500 +++ e2fsprogs-1.39-tyt1/resize/online.c 2006-10-06 23:42:52.000000000 -0400 @@ -27,7 +27,7 @@ errcode_t retval; dgrp_t i; blk_t size; - int fd, r_frac, overhead; + int fd, r_frac, overhead, new_desc_blocks; printf(_("Filesystem at %s is mounted on %s; " "on-line resizing required\n"), fs->device_name, mtpt); @@ -38,6 +38,25 @@ exit(1); } + /* + * If the number of descriptor blocks is going to increase, + * the on-line resizing inode must be present. + */ + new_desc_blocks = ext2fs_div_ceil( + ext2fs_div_ceil(*new_size - + fs->super->s_first_data_block, + EXT2_BLOCKS_PER_GROUP(fs->super)), + EXT2_DESC_PER_BLOCK(fs->super)); + printf("old desc_blocks = %d, new_desc_blocks = %d\n", fs->desc_blocks, + new_desc_blocks); + if (!(fs->super->s_feature_compat & + EXT2_FEATURE_COMPAT_RESIZE_INODE) && + new_desc_blocks != fs->desc_blocks) { + com_err(program_name, 0, + _("Filesystem does not support online resizing")); + exit(1); + } + fd = open(mtpt, O_RDONLY); if (fd < 0) { com_err(program_name, errno, @@ -52,15 +71,14 @@ _("Permission denied to resize filesystem")); else if (errno == ENOTTY) com_err(program_name, 0, - _("Filesystem does not support online resizing")); + _("Kernel does not support online resizing")); else com_err(program_name, errno, _("While checking for on-line resizing support")); exit(1); } - r_frac = ((100 * sb->s_r_blocks_count) + sb->s_blocks_count-1) / - sb->s_blocks_count; + r_frac = ext2fs_div_ceil(100 * sb->s_r_blocks_count, sb->s_blocks_count); retval = ext2fs_read_bitmaps(fs); if (retval) @@ -74,7 +92,7 @@ if (retval) return retval; - printf(_("Performing an on-line resize of %s to %d (%dk) blocks.\n"), + printf(_("Performing an on-line resize of %s to %u (%dk) blocks.\n"), fs->device_name, *new_size, fs->blocksize / 1024); size = fs->group_desc_count * sb->s_blocks_per_group + @@ -107,7 +125,8 @@ sb->s_first_data_block - (i * sb->s_blocks_per_group); } - input.reserved_blocks = input.blocks_count * r_frac / 100; + input.reserved_blocks = e2p_percent(r_frac, + input.blocks_count); #if 0 printf("new block bitmap is at 0x%04x\n", input.block_bitmap); @@ -115,7 +134,7 @@ printf("new inode table is at 0x%04x-0x%04x\n", input.inode_table, input.inode_table + new_fs->inode_blocks_per_group-1); - printf("new group has %d blocks\n", input.blocks_count); + printf("new group has %u blocks\n", input.blocks_count); printf("new group will reserve %d blocks\n", input.reserved_blocks); printf("new group has %d free blocks\n", diff -Nru e2fsprogs-1.39/resize/resize2fs.c e2fsprogs-1.39-tyt1/resize/resize2fs.c --- e2fsprogs-1.39/resize/resize2fs.c 2006-03-18 21:34:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/resize/resize2fs.c 2006-10-06 23:42:52.000000000 -0400 @@ -186,19 +186,18 @@ unsigned long i, j, old_desc_blocks, max_group; unsigned int meta_bg, meta_bg_size; int has_super; + __u64 new_inodes; /* u64 to check for overflow */ fs->super->s_blocks_count = new_size; retry: - fs->group_desc_count = (fs->super->s_blocks_count - - fs->super->s_first_data_block + - EXT2_BLOCKS_PER_GROUP(fs->super) - 1) - / EXT2_BLOCKS_PER_GROUP(fs->super); + fs->group_desc_count = ext2fs_div_ceil(fs->super->s_blocks_count - + fs->super->s_first_data_block, + EXT2_BLOCKS_PER_GROUP(fs->super)); if (fs->group_desc_count == 0) return EXT2_ET_TOOSMALL; - fs->desc_blocks = (fs->group_desc_count + - EXT2_DESC_PER_BLOCK(fs->super) - 1) - / EXT2_DESC_PER_BLOCK(fs->super); + fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count, + EXT2_DESC_PER_BLOCK(fs->super)); /* * Overhead is the number of bookkeeping blocks per group. It @@ -228,6 +227,12 @@ /* * Adjust the number of inodes */ + new_inodes =(__u64)fs->super->s_inodes_per_group * fs->group_desc_count; + if (new_inodes > ~0U) { + fprintf(stderr, _("inodes (%llu) must be less than %u"), + new_inodes, ~0U); + return EXT2_ET_TOO_MANY_INODES; + } fs->super->s_inodes_count = fs->super->s_inodes_per_group * fs->group_desc_count; @@ -245,10 +250,10 @@ /* * Adjust the number of reserved blocks */ - blk = old_fs->super->s_r_blocks_count * 100 / + blk = (__u64)old_fs->super->s_r_blocks_count * 100 / old_fs->super->s_blocks_count; - fs->super->s_r_blocks_count = ((fs->super->s_blocks_count * blk) - / 100); + fs->super->s_r_blocks_count = e2p_percent(blk, + fs->super->s_blocks_count); /* * Adjust the bitmaps for size @@ -538,14 +543,13 @@ static errcode_t mark_table_blocks(ext2_filsys fs, ext2fs_block_bitmap bmap) { - blk_t block, b; + blk_t b; unsigned int j; dgrp_t i; unsigned long meta_bg_size; unsigned int old_desc_blocks; meta_bg_size = (fs->blocksize / sizeof (struct ext2_group_desc)); - block = fs->super->s_first_data_block; if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) old_desc_blocks = fs->super->s_first_meta_bg; else @@ -573,7 +577,6 @@ */ ext2fs_mark_block_bitmap(bmap, fs->group_desc[i].bg_inode_bitmap); - block += fs->super->s_blocks_per_group; } return 0; } @@ -1584,7 +1587,9 @@ total_free = 0; count = 0; group = 0; - for (ino = 1; ino <= fs->super->s_inodes_count; ino++) { + + /* Protect loop from wrap-around if s_inodes_count maxed */ + for (ino = 1; ino <= fs->super->s_inodes_count && ino > 0; ino++) { if (!ext2fs_fast_test_inode_bitmap(fs->inode_map, ino)) { group_free++; total_free++; diff -Nru e2fsprogs-1.39/tests/ChangeLog e2fsprogs-1.39-tyt1/tests/ChangeLog --- e2fsprogs-1.39/tests/ChangeLog 2006-05-28 23:28:05.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,14 @@ +2006-08-30 Eric Sandeen + + * m_raid_opt/expect.1: + Change expected values for last group due to correctly + calculated last block when using strides. + +2006-08-06 Theodore Tso + + * Makefile.in, test_config: If available, use unified diffs to + report test failures + 2006-05-28 Theodore Tso * test_config: Unset all locale-related environment variables diff -Nru e2fsprogs-1.39/tests/f_bad_disconnected_inode/expect.1 e2fsprogs-1.39-tyt1/tests/f_bad_disconnected_inode/expect.1 --- e2fsprogs-1.39/tests/f_bad_disconnected_inode/expect.1 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/f_bad_disconnected_inode/expect.1 2006-10-06 23:42:54.000000000 -0400 @@ -1,4 +1,10 @@ Pass 1: Checking inodes, blocks, and sizes +Inode 15 has EXTENT_FL set, but is not in extents format +Fix? yes + +Inode 16 has EXTENT_FL set, but is not in extents format +Fix? yes + Pass 2: Checking directory structure Pass 3: Checking directory connectivity /lost+found not found. Create? yes diff -Nru e2fsprogs-1.39/tests/f_bbfile/expect.1 e2fsprogs-1.39-tyt1/tests/f_bbfile/expect.1 --- e2fsprogs-1.39/tests/f_bbfile/expect.1 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/f_bbfile/expect.1 2006-10-06 23:42:54.000000000 -0400 @@ -3,46 +3,60 @@ Pass 1: Checking inodes, blocks, and sizes Group 0's inode bitmap (4) is bad. Relocate? yes +Inode 11 has corrupt indirect block +Clear? yes + Relocating group 0's inode bitmap from 4 to 43... +Restarting e2fsck from the beginning... +Pass 1: Checking inodes, blocks, and sizes Running additional passes to resolve blocks claimed by more than one inode... Pass 1B: Rescanning for multiply-claimed blocks Multiply-claimed block(s) in inode 2: 21 -Multiply-claimed block(s) in inode 11: 9 10 11 12 13 14 15 16 17 18 19 20 Multiply-claimed block(s) in inode 12: 25 26 Pass 1C: Scanning directories for inodes with multiply-claimed blocks Pass 1D: Reconciling multiply-claimed blocks -(There are 3 inodes containing multiply-claimed blocks.) +(There are 2 inodes containing multiply-claimed blocks.) File / (inode #2, mod time Sun Jan 2 08:29:13 1994) has 1 multiply-claimed block(s), shared with 1 file(s): (inode #1, mod time Sun Jul 17 00:47:58 1994) Clone multiply-claimed blocks? yes -File /lost+found (inode #11, mod time Sun Jan 2 08:28:40 1994) - has 12 multiply-claimed block(s), shared with 1 file(s): - (inode #1, mod time Sun Jul 17 00:47:58 1994) -Clone multiply-claimed blocks? yes - File /termcap (inode #12, mod time Sun Jan 2 08:29:13 1994) has 2 multiply-claimed block(s), shared with 1 file(s): (inode #1, mod time Sun Jul 17 00:47:58 1994) Clone multiply-claimed blocks? yes Pass 2: Checking directory structure +Entry 'lost+found' in / (2) has deleted/unused inode 11. Clear? yes + Pass 3: Checking directory connectivity +/lost+found not found. Create? yes + Pass 4: Checking reference counts +Inode 2 ref count is 4, should be 3. Fix? yes + Pass 5: Checking group summary information Block bitmap differences: +43 Fix? yes -Free blocks count wrong for group #0 (57, counted=41). +Free blocks count wrong for group #0 (56, counted=52). +Fix? yes + +Free blocks count wrong (56, counted=52). +Fix? yes + +Free inodes count wrong for group #0 (19, counted=20). +Fix? yes + +Directories count wrong for group #0 (3, counted=2). Fix? yes -Free blocks count wrong (57, counted=41). +Free inodes count wrong (19, counted=20). Fix? yes test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** -test_filesys: 12/32 files (0.0% non-contiguous), 59/100 blocks +test_filesys: 12/32 files (0.0% non-contiguous), 48/100 blocks Exit status is 1 diff -Nru e2fsprogs-1.39/tests/f_bbfile/expect.2 e2fsprogs-1.39-tyt1/tests/f_bbfile/expect.2 --- e2fsprogs-1.39/tests/f_bbfile/expect.2 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/f_bbfile/expect.2 2006-10-06 23:42:54.000000000 -0400 @@ -3,5 +3,5 @@ Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information -test_filesys: 12/32 files (8.3% non-contiguous), 59/100 blocks +test_filesys: 12/32 files (8.3% non-contiguous), 48/100 blocks Exit status is 0 diff -Nru e2fsprogs-1.39/tests/f_extents/expect.1 e2fsprogs-1.39-tyt1/tests/f_extents/expect.1 --- e2fsprogs-1.39/tests/f_extents/expect.1 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/tests/f_extents/expect.1 2006-10-06 23:42:54.000000000 -0400 @@ -0,0 +1,61 @@ +Pass 1: Checking inodes, blocks, and sizes +Inode 12 is in extent format, but superblock is missing EXTENTS feature +Fix? yes + +Inode 13 missing EXTENT_FL, but is in extents format +Fix? yes + +Inode 16 has corrupt extent at block 3 (logical 4613) length 2 +Clear? yes + +Inode 16, i_blocks is 16, should be 12. Fix? yes + +Inode 18 has EXTENT_FL set, but is not in extents format +Fix? yes + +Inode 19 has EXTENT_FL set, but is not in extents format +Fix? yes + +Inode 17 has high 16 bits of extent/index block set +Clear? yes + +High 16 bits of extent/index block set +CLEARED. +High 16 bits of extent/index block set +CLEARED. + +Running additional passes to resolve blocks claimed by more than one inode... +Pass 1B: Rescanning for multiply-claimed blocks +Multiply-claimed block(s) in inode 12: 5133 5124 5125 5129 5132 5133 5142 5143 5144 5145 +Multiply-claimed block(s) in inode 17: 5124 5125 5129 5132 5142 5143 5144 5145 +Pass 1C: Scanning directories for inodes with multiply-claimed blocks +Pass 1D: Reconciling multiply-claimed blocks +(There are 2 inodes containing multiply-claimed blocks.) + +File /fdup1 (inode #12, mod time Wed Jul 5 21:55:26 2006) + has 10 multiply-claimed block(s), shared with 1 file(s): + /fdup2 (inode #17, mod time Wed Jul 5 21:55:27 2006) +Clone multiply-claimed blocks? yes + +File /fdup2 (inode #17, mod time Wed Jul 5 21:55:27 2006) + has 8 multiply-claimed block(s), shared with 1 file(s): + /fdup1 (inode #12, mod time Wed Jul 5 21:55:26 2006) +Multiply-claimed blocks already reassigned or cloned. + +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +Block bitmap differences: +4611 -(4613--4614) -(5121--5122) +(5143--5146) +Fix? yes + +Free blocks count wrong for group #0 (7081, counted=7066). +Fix? yes + +Free blocks count wrong (7081, counted=7066). +Fix? yes + + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 19/256 files (15.8% non-contiguous), 1126/8192 blocks +Exit status is 1 diff -Nru e2fsprogs-1.39/tests/f_extents/expect.2 e2fsprogs-1.39-tyt1/tests/f_extents/expect.2 --- e2fsprogs-1.39/tests/f_extents/expect.2 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/tests/f_extents/expect.2 2006-10-06 23:42:54.000000000 -0400 @@ -0,0 +1,7 @@ +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +test_filesys: 19/256 files (15.8% non-contiguous), 1126/8192 blocks +Exit status is 0 Binary files e2fsprogs-1.39/tests/f_extents/image.gz and e2fsprogs-1.39-tyt1/tests/f_extents/image.gz differ diff -Nru e2fsprogs-1.39/tests/f_extents/name e2fsprogs-1.39-tyt1/tests/f_extents/name --- e2fsprogs-1.39/tests/f_extents/name 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/tests/f_extents/name 2006-10-06 23:42:54.000000000 -0400 @@ -0,0 +1 @@ +extent-mapped files with errors diff -Nru e2fsprogs-1.39/tests/f_lotsbad/expect.1 e2fsprogs-1.39-tyt1/tests/f_lotsbad/expect.1 --- e2fsprogs-1.39/tests/f_lotsbad/expect.1 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/f_lotsbad/expect.1 2006-10-06 23:42:54.000000000 -0400 @@ -8,54 +8,41 @@ Inode 13, i_blocks is 32, should be 30. Fix? yes -Inode 12 has illegal block(s). Clear? yes +Inode 12 has corrupt indirect block +Clear? yes -Illegal block #12 (778398818) in inode 12. CLEARED. -Illegal block #13 (1768444960) in inode 12. CLEARED. -Illegal block #14 (1752375411) in inode 12. CLEARED. -Illegal block #15 (1684829551) in inode 12. CLEARED. -Illegal block #16 (1886349344) in inode 12. CLEARED. -Illegal block #17 (1819633253) in inode 12. CLEARED. -Illegal block #18 (1663072620) in inode 12. CLEARED. -Illegal block #19 (1735287144) in inode 12. CLEARED. -Illegal block #20 (1310731877) in inode 12. CLEARED. -Illegal block #21 (560297071) in inode 12. CLEARED. -Illegal block #22 (543512352) in inode 12. CLEARED. -Too many illegal blocks in inode 12. -Clear inode? yes +Inode 12, i_blocks is 34, should be 24. Fix? yes -Restarting e2fsck from the beginning... -Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure -Entry 'termcap' in / (2) has deleted/unused inode 12. Clear? yes +Directory inode 13 has an unallocated block #16580876. Allocate? yes Pass 3: Checking directory connectivity Pass 4: Checking reference counts Inode 2 ref count is 5, should be 4. Fix? yes Pass 5: Checking group summary information -Block bitmap differences: -(27--41) -(44--45) -(74--90) +Block bitmap differences: -(38--41) -(74--90) Fix? yes -Free blocks count wrong for group #0 (9, counted=43). +Free blocks count wrong for group #0 (9, counted=30). Fix? yes -Free blocks count wrong (9, counted=43). +Free blocks count wrong (9, counted=30). Fix? yes -Inode bitmap differences: -12 -14 +Inode bitmap differences: -14 Fix? yes -Free inodes count wrong for group #0 (18, counted=20). +Free inodes count wrong for group #0 (18, counted=19). Fix? yes Directories count wrong for group #0 (4, counted=3). Fix? yes -Free inodes count wrong (18, counted=20). +Free inodes count wrong (18, counted=19). Fix? yes test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** -test_filesys: 12/32 files (0.0% non-contiguous), 57/100 blocks +test_filesys: 13/32 files (7.7% non-contiguous), 70/100 blocks Exit status is 1 diff -Nru e2fsprogs-1.39/tests/f_messy_inode/expect.1 e2fsprogs-1.39-tyt1/tests/f_messy_inode/expect.1 --- e2fsprogs-1.39/tests/f_messy_inode/expect.1 2005-09-06 05:40:15.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/f_messy_inode/expect.1 2006-10-06 23:42:54.000000000 -0400 @@ -1,38 +1,36 @@ Filesystem did not have a UUID; generating one. Pass 1: Checking inodes, blocks, and sizes -Inode 14 has illegal block(s). Clear? yes - -Illegal block #2 (4294901760) in inode 14. CLEARED. -Illegal block #3 (4294901760) in inode 14. CLEARED. -Illegal block #4 (4294901760) in inode 14. CLEARED. -Illegal block #5 (4294901760) in inode 14. CLEARED. -Illegal block #6 (4294901760) in inode 14. CLEARED. -Illegal block #7 (4294901760) in inode 14. CLEARED. -Illegal block #8 (4294901760) in inode 14. CLEARED. -Illegal block #9 (4294901760) in inode 14. CLEARED. -Illegal block #10 (4294901760) in inode 14. CLEARED. -Inode 14, i_size is 18446462598732849291, should be 2048. Fix? yes - -Inode 14, i_blocks is 18, should be 4. Fix? yes +Inode 14 has corrupt indirect block +Clear? yes +Restarting e2fsck from the beginning... +Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure -i_file_acl for inode 14 (/MAKEDEV) is 4294901760, should be zero. -Clear? yes +Entry 'MAKEDEV' in / (2) has deleted/unused inode 14. Clear? yes Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information -Block bitmap differences: -(43--49) +Block bitmap differences: -(41--49) +Fix? yes + +Free blocks count wrong for group #0 (68, counted=77). +Fix? yes + +Free blocks count wrong (68, counted=77). +Fix? yes + +Inode bitmap differences: -14 Fix? yes -Free blocks count wrong for group #0 (68, counted=75). +Free inodes count wrong for group #0 (3, counted=4). Fix? yes -Free blocks count wrong (68, counted=75). +Free inodes count wrong (3, counted=4). Fix? yes test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** -test_filesys: 29/32 files (3.4% non-contiguous), 25/100 blocks +test_filesys: 28/32 files (0.0% non-contiguous), 23/100 blocks Exit status is 1 diff -Nru e2fsprogs-1.39/tests/f_messy_inode/expect.2 e2fsprogs-1.39-tyt1/tests/f_messy_inode/expect.2 --- e2fsprogs-1.39/tests/f_messy_inode/expect.2 2005-09-06 05:40:15.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/f_messy_inode/expect.2 2006-10-06 23:42:54.000000000 -0400 @@ -3,5 +3,5 @@ Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information -test_filesys: 29/32 files (0.0% non-contiguous), 25/100 blocks +test_filesys: 28/32 files (0.0% non-contiguous), 23/100 blocks Exit status is 0 diff -Nru e2fsprogs-1.39/tests/f_resize_inode/script e2fsprogs-1.39-tyt1/tests/f_resize_inode/script --- e2fsprogs-1.39/tests/f_resize_inode/script 2005-09-06 05:40:15.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/f_resize_inode/script 2006-10-06 23:42:52.000000000 -0400 @@ -1,4 +1,4 @@ -echo -n "e2fsck with resize_inode: " +printf "e2fsck with resize_inode: " FSCK_OPT=-yf OUT=$test_name.log if [ -f $test_dir/expect.gz ]; then diff -Nru e2fsprogs-1.39/tests/Makefile.in e2fsprogs-1.39-tyt1/tests/Makefile.in --- e2fsprogs-1.39/tests/Makefile.in 2005-09-06 05:40:14.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/Makefile.in 2006-10-06 23:42:52.000000000 -0400 @@ -19,6 +19,7 @@ @HTREE_CMT@ @echo "HTREE=y" >> test_script @echo 'EGREP="@EGREP@"' >> test_script @echo "SRCDIR=@srcdir@" >> test_script + @echo "DIFF_OPTS=@UNI_DIFF_OPTS@" >> test_script @cat $(srcdir)/test_script.in >> test_script @chmod +x test_script diff -Nru e2fsprogs-1.39/tests/m_raid_opt/expect.1 e2fsprogs-1.39-tyt1/tests/m_raid_opt/expect.1 --- e2fsprogs-1.39/tests/m_raid_opt/expect.1 2006-05-24 13:00:12.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/m_raid_opt/expect.1 2006-10-06 23:42:52.000000000 -0400 @@ -944,8 +944,8 @@ Free inodes: 32257-32512 Group 127: (Blocks 130049-131071) Group descriptor at 130049 - Block bitmap at 130744 (+695), Inode bitmap at 130745 (+696) + Block bitmap at 130743 (+694), Inode bitmap at 130744 (+695) Inode table at 130050-130081 (+1) 988 free blocks, 256 free inodes, 0 directories - Free blocks: 130082-130743, 130746-131071 + Free blocks: 130082-130742, 130745-131071 Free inodes: 32513-32768 diff -Nru e2fsprogs-1.39/tests/r_move_itable/script e2fsprogs-1.39-tyt1/tests/r_move_itable/script --- e2fsprogs-1.39/tests/r_move_itable/script 2005-09-06 05:40:15.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/r_move_itable/script 2006-10-06 23:42:52.000000000 -0400 @@ -1,4 +1,4 @@ -echo -n "resize2fs with resize_inode: " +printf "resize2fs with resize_inode: " if test -x $RESIZE2FS_EXE; then diff -Nru e2fsprogs-1.39/tests/r_resize_inode/script e2fsprogs-1.39-tyt1/tests/r_resize_inode/script --- e2fsprogs-1.39/tests/r_resize_inode/script 2005-09-06 05:40:15.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/r_resize_inode/script 2006-10-06 23:42:52.000000000 -0400 @@ -1,4 +1,4 @@ -echo -n "resize2fs with resize_inode: " +printf "resize2fs with resize_inode: " if test -x $RESIZE2FS_EXE; then diff -Nru e2fsprogs-1.39/tests/run_e2fsck e2fsprogs-1.39-tyt1/tests/run_e2fsck --- e2fsprogs-1.39/tests/run_e2fsck 2005-09-06 05:40:15.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/run_e2fsck 2006-10-06 23:42:52.000000000 -0400 @@ -1,5 +1,5 @@ if [ "$DESCRIPTION"x != x ]; then - echo -n "$DESCRIPTION: " + printf "%s" "$DESCRIPTION: " fi if [ "$IMAGE"x = x ]; then IMAGE=$test_dir/image.gz diff -Nru e2fsprogs-1.39/tests/test_config e2fsprogs-1.39-tyt1/tests/test_config --- e2fsprogs-1.39/tests/test_config 2006-05-28 23:08:44.000000000 -0400 +++ e2fsprogs-1.39-tyt1/tests/test_config 2006-10-06 23:42:52.000000000 -0400 @@ -18,7 +18,6 @@ LD_LIBRARY_PATH=../lib:../lib/ext2fs:../lib/e2p:../lib/et:../lib/ss DYLD_LIBRARY_PATH=../lib:../lib/ext2fs:../lib/e2p:../lib/et:../lib/ss TMPFILE=./test.img -DIFF_OPTS=-c export LD_LIBRARY_PATH export DYLD_LIBRARY_PATH TZ=GMT diff -Nru e2fsprogs-1.39/util/ChangeLog e2fsprogs-1.39-tyt1/util/ChangeLog --- e2fsprogs-1.39/util/ChangeLog 2005-11-09 17:24:25.000000000 -0500 +++ e2fsprogs-1.39-tyt1/util/ChangeLog 2006-10-06 23:42:52.000000000 -0400 @@ -1,3 +1,8 @@ +2006-08-05 Andreas Dilger + + * subst.c (main): Create automatically-generated files be + read-only in order to remind developers not to end them. + 2005-10-26 Theodore Ts'o * Makefile.in: Use BUILD_CCFLAGS and BUILD_LDFLAGS instead of diff -Nru e2fsprogs-1.39/util/debian.exclude e2fsprogs-1.39-tyt1/util/debian.exclude --- e2fsprogs-1.39/util/debian.exclude 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.39-tyt1/util/debian.exclude 2006-10-06 23:42:52.000000000 -0400 @@ -0,0 +1,13 @@ +.hg +.hgignore +.pc +patches +README.subset +build +rpm.log +TODO +powerquest +.exclude-file +po/stamp-cat-id +po/cat-id-tbl.c +doc/draft-leach-uuids-guids-01.txt diff -Nru e2fsprogs-1.39/util/gen-tarball.in e2fsprogs-1.39-tyt1/util/gen-tarball.in --- e2fsprogs-1.39/util/gen-tarball.in 2005-09-06 05:40:15.000000000 -0400 +++ e2fsprogs-1.39-tyt1/util/gen-tarball.in 2006-10-06 23:42:52.000000000 -0400 @@ -54,6 +54,26 @@ case @E2FSPROGS_VERSION@ in *-WIP|pre-*) deb_vers=`echo $base_ver 0.01 - p | dc` + SRCROOT="e2fsprogs-$deb_vers+$base_ver-WIP-$date_spec+dfsg" + ;; + *-rc*) + deb_vers=`echo @E2FSPROGS_VERSION@ | sed -e 's/-rc/rc/'` + SRCROOT="e2fsprogs-$deb_vers+dfsg" + ;; + *-PLUS) + SRCROOT="e2fsprogs-$base_ver+$date_spec+dfsg" + ;; + *) + SRCROOT="e2fsprogs-$base_ver+dfsg" + ;; + esac + list=debian + ;; + ubuntu) + date_spec="@E2FSPROGS_YEAR@.$mon.@E2FSPROGS_DAY@" + case @E2FSPROGS_VERSION@ in + *-WIP|pre-*) + deb_vers=`echo $base_ver 0.01 - p | dc` SRCROOT="e2fsprogs-$deb_vers+$base_ver-WIP-$date_spec" ;; *-rc*) diff -Nru e2fsprogs-1.39/util/subst.c e2fsprogs-1.39-tyt1/util/subst.c --- e2fsprogs-1.39/util/subst.c 2005-09-06 05:40:15.000000000 -0400 +++ e2fsprogs-1.39-tyt1/util/subst.c 2006-10-06 23:42:52.000000000 -0400 @@ -367,6 +367,7 @@ fclose(in); fclose(out); if (outfn) { + struct stat st; if (compare_file(outfn, newfn)) { if (verbose) printf("No change, keeping %s.\n", outfn); @@ -386,6 +387,9 @@ printf("Creating or replacing %s.\n", outfn); rename(newfn, outfn); } + /* set read-only to alert user it is a generated file */ + if (stat(outfn, &st) == 0) + chmod(outfn, st.st_mode & ~0222); } return (0); } diff -Nru e2fsprogs-1.39/version.h e2fsprogs-1.39-tyt1/version.h --- e2fsprogs-1.39/version.h 2006-05-29 11:25:15.000000000 -0400 +++ e2fsprogs-1.39-tyt1/version.h 2006-10-06 23:42:52.000000000 -0400 @@ -7,5 +7,5 @@ * the GNU Public License. */ -#define E2FSPROGS_VERSION "1.39" -#define E2FSPROGS_DATE "29-May-2006" +#define E2FSPROGS_VERSION "1.40-WIP" +#define E2FSPROGS_DATE "02-Oct-2006"