diff options
Diffstat (limited to 'package/aufs2-util/src')
-rw-r--r-- | package/aufs2-util/src/COPYING | 340 | ||||
-rw-r--r-- | package/aufs2-util/src/Makefile | 93 | ||||
-rw-r--r-- | package/aufs2-util/src/README | 46 | ||||
-rw-r--r-- | package/aufs2-util/src/au_util.h | 67 | ||||
-rwxr-xr-x | package/aufs2-util/src/aubrsync | 304 | ||||
-rwxr-xr-x | package/aufs2-util/src/auchk | 130 | ||||
-rw-r--r-- | package/aufs2-util/src/aufs.in.5 | 1684 | ||||
-rw-r--r-- | package/aufs2-util/src/aufs.shlib | 83 | ||||
-rw-r--r-- | package/aufs2-util/src/auplink.c | 64 | ||||
-rw-r--r-- | package/aufs2-util/src/br.c | 172 | ||||
-rw-r--r-- | package/aufs2-util/src/c2sh.c | 42 | ||||
-rw-r--r-- | package/aufs2-util/src/c2tmac.c | 44 | ||||
-rw-r--r-- | package/aufs2-util/src/compat.h | 34 | ||||
-rw-r--r-- | package/aufs2-util/src/mount.aufs.c | 255 | ||||
-rw-r--r-- | package/aufs2-util/src/mtab.c | 216 | ||||
-rw-r--r-- | package/aufs2-util/src/plink.c | 356 | ||||
-rw-r--r-- | package/aufs2-util/src/proc_mnt.c | 85 | ||||
-rw-r--r-- | package/aufs2-util/src/rdu.c | 749 | ||||
-rwxr-xr-x | package/aufs2-util/src/umount.aufs | 31 |
19 files changed, 0 insertions, 4795 deletions
diff --git a/package/aufs2-util/src/COPYING b/package/aufs2-util/src/COPYING deleted file mode 100644 index f90922eea..000000000 --- a/package/aufs2-util/src/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - 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 License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/package/aufs2-util/src/Makefile b/package/aufs2-util/src/Makefile deleted file mode 100644 index 544dfc538..000000000 --- a/package/aufs2-util/src/Makefile +++ /dev/null @@ -1,93 +0,0 @@ - -# Copyright (C) 2005-2010 Junjiro R. Okajima -# -# This program, aufs is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# 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 License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -CFLAGS += -I./libau -CFLAGS += -O -Wall - -Cmd = umount.aufs auchk aubrsync -Man = aufs.5 -Etc = etc_default_aufs -Bin = auplink mount.aufs #auctl -BinObj = $(addsuffix .o, ${Bin}) -LibUtil = libautil.a -LibUtilObj = proc_mnt.o br.o plink.o mtab.o -LibUtilHdr = au_util.h -export - -all: ${Man} ${Bin} ${Etc} - ${MAKE} -C libau $@ - ln -sf ./libau/libau*.so . - -${Bin}: LDFLAGS += -static -s -${Bin}: LDLIBS = -L. -lautil -${BinObj}: %.o: %.c ${LibUtilHdr} ${LibUtil} - -${LibUtilObj}: %.o: %.c ${LibUtilHdr} -#${LibUtil}: ${LibUtil}(${LibUtilObj}) -${LibUtil}: $(foreach o, ${LibUtilObj}, ${LibUtil}(${o})) -.NOTPARALLEL: ${LibUtil} - -etc_default_aufs: c2sh aufs.shlib - ${RM} $@ - echo '# aufs variables for shell scripts' > $@ - ./c2sh >> $@ - echo >> $@ - sed -e '0,/^$$/d' aufs.shlib >> $@ - -aufs.5: aufs.in.5 c2tmac - ${RM} $@ - ./c2tmac > $@ - awk '{ \ - gsub(/\140[^\047]*\047/, "\\[oq]&\\[cq]"); \ - gsub(/\\\[oq\]\140/, "\\[oq]"); \ - gsub(/\047\\\[cq\]/, "\\[cq]"); \ - gsub(/\047/, "\\[aq]"); \ - print; \ - }' aufs.in.5 >> $@ - chmod a-w $@ - -.INTERMEDIATE: c2sh c2tmac - -Install = install -o root -g root -p -install_sbin: File = mount.aufs umount.aufs auplink -install_sbin: Tgt = ${DESTDIR}/sbin -install_ubin: File = auchk aubrsync #auctl -install_ubin: Tgt = ${DESTDIR}/usr/bin -install_sbin install_ubin: ${File} - install -d ${Tgt} - ${Install} -m 755 ${File} ${Tgt} -install_etc: File = etc_default_aufs -install_etc: Tgt = ${DESTDIR}/etc/default/aufs -install_etc: ${File} - install -d $(dir ${Tgt}) - ${Install} -m 644 -T ${File} ${Tgt} -install_man: File = aufs.5 -install_man: Tgt = ${DESTDIR}/usr/share/man/man5 -install_man: ${File} - install -d ${Tgt} - ${Install} -m 644 ${File} ${Tgt} -install_ulib: - ${MAKE} -C libau $@ - -install: install_man install_sbin install_ubin install_etc install_ulib - -clean: - ${RM} ${Man} ${Bin} ${Etc} ${LibUtil} libau.so* *~ - ${RM} ${BinObj} ${LibUtilObj} - ${MAKE} -C libau $@ - --include priv.mk diff --git a/package/aufs2-util/src/README b/package/aufs2-util/src/README deleted file mode 100644 index 1e1f45422..000000000 --- a/package/aufs2-util/src/README +++ /dev/null @@ -1,46 +0,0 @@ - -Utilities for aufs2 -http://aufs.sf.net -J. R. Okajima - -These utilities are always necessary for aufs2. -If you forget to install them, your aufs may not work correctly. -And these are not for aufs1 essentially, except aubrsync. See below in -detail. - -Makefile in this tree has some customizable make-variables. -- KDIR - specify your kernel source path if necessary -- DESTDIR - specify your install path if necessary. - some commands have to be installed under /sbin. - -o /sbin/mount.aufs, /sbin/umount.aufs - Helpers for util-linux-ng package. You should NOT invoke them - manually. Just install them by "make install". - -o /sbin/auplink - Handles aufs pseudo-link at remount/unmount time. You can invoke it - manually at anytime. - -o /usr/bin/auchk - Similar to generic fsck. Checks whether a branch is healthy or not - from aufs's point of view. - -o /usr/bin/aubrsync - Move files from the upper writable branch to the lower branch. - If you use this script with aufs1, then you need to install aufs.shlib - to /usr/lib/aufs.shlib. Currently only the 20080211 version is tested - for aufs1. - The development of this script is sponcered by ASUSTek Computer Inc. - (http://www.asus.com/). - Kindly they agreed that I keep my aufs work as free software as it has - been. - -o /etc/default/aufs - A library for shell scripts. - - -# Local variables: ; -# mode: text; -# End: ; diff --git a/package/aufs2-util/src/au_util.h b/package/aufs2-util/src/au_util.h deleted file mode 100644 index 21b965510..000000000 --- a/package/aufs2-util/src/au_util.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2005-2009 Junjiro Okajima - * - * This program, aufs is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * 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 License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __AUFS_UTIL_H__ -#define __AUFS_UTIL_H__ - -#include <errno.h> -#include <error.h> - -/* - * error_at_line() is decleared with (__printf__, 5, 6) attribute, - * and our compiler produces a warning unless args is not given. - * __VA_ARGS__ does not help the attribute. - */ -#define AuFin(fmt, args...) \ - error_at_line(errno, errno, __FILE__, __LINE__, fmt, ##args) - -#ifdef DEBUG -#define MTab "/tmp/mtab" -#else -#define MTab "/etc/mtab" -#endif - -/* proc_mounts.c */ -struct mntent; -int au_proc_getmntent(char *mntpnt, struct mntent *rent); - -/* br.c */ -int au_br(char ***br, int *nbr, struct mntent *ent); - -/* plink.c */ -enum { - AuPlink_FLUSH, - AuPlink_CPUP, - AuPlink_LIST -}; -int au_plink(char cwd[], int cmd, int begin_maint, int end_maint); -void au_plink_maint(char *path); - -/* mtab.c */ -void au_print_ent(struct mntent *ent); -int au_update_mtab(char *mntpnt, int do_remount, int do_verbose); - -#define _Dpri(fmt, ...) printf("%s:%d:" fmt, \ - __func__, __LINE__, ##__VA_ARGS__) -#ifdef DEBUG -#define Dpri(fmt, ...) _Dpri(fmt, ##__VA_ARGS__) -#else -#define Dpri(fmt, ...) do { } while(0) -#endif - -#endif /* __AUFS_UTIL_H__ */ diff --git a/package/aufs2-util/src/aubrsync b/package/aufs2-util/src/aubrsync deleted file mode 100755 index 54adac9cb..000000000 --- a/package/aufs2-util/src/aubrsync +++ /dev/null @@ -1,304 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2005-2009 Junjiro Okajima -# -# This program, aufs is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# 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 License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -# -# The development of this script is sponcered by ASUSTek Computer Inc. -# Kindly they agreed that I keep my aufs work as free software as it has -# been. -# - -set -eu -#set -x - -me=$(basename $0) -EEcho() # str -{ - echo ${me}: $@ 1>&2 -} - -f=/sbin/mount.aufs -test ! -x $f && EEcho $f is not installed && exit 1 - -# special handling for backward compatibility. -# -# aufs in the donated eeepc is aufs1 20080211 without CONFIG_AUFS_COMPAT. -# /etc/default/aufs was introduced in aufs1 20080922. -# shwh/noshwh was introduced in aufs1 20080310 with CONFIG_AUFS_SHWH. -# noshwh became always available regardless CONFIG_AUFS_SHWH in aufs1 20081117. - -noshwh=1 -AUFS_VERSION=20080211 -f=/etc/default/aufs -if [ -s $f ] -then - . $f -else - echo ${me}: warning, broken $f, assuming aufs is $AUFS_VERSION - f=/usr/lib/aufs.shlib - test ! -s $f && EEcho $f is not installed && exit 1 - . $f - - case $AUFS_VERSION in - 200*) # aufs1 - test $AUFS_VERSION -lt 20081117 && noshwh=0 - ;; - esac - AUFS_SUPER_MAGIC=1635083891 - AUFS_SUPER_MAGIC_HEX=0x61756673 - AUFS_WH_PFX=.wh. - AUFS_WH_PFX2=.wh..wh. - AUFS_WH_DIROPQ=.wh..wh..opq -fi - -######################################## - -_Rsync="rsync --exclude=lost+found" -Rsync="$_Rsync -aHSx --devices --specials --delete-before" -Copy="$Rsync" -Move="$Copy" -RsyncWh="$_Rsync -ptgoHx" - -FindForRm() # rw -{ - echo "find \"$1\" -xdev -depth \( - \( ! -type d - \( -name $AUFS_WH_DIROPQ - -o ! -name ${AUFS_WH_PFX2}\* \) \) - -o \( -type d - ! -name ${AUFS_WH_PFX2}\* - ! -wholename \"$1\" - ! -wholename \"$1/lost+found\" \) - \) -print0" -} - -MoveWh() # rw ro+wh -{ - cd "$1" - find . -xdev -name ${AUFS_WH_PFX}\* ! -name ${AUFS_WH_PFX2}\* \ - -printf '%P\n' | - while read wh - do - f=$(echo "$wh" | sed -e ' - s/^'${AUFS_WH_PFX}'// - t - s:/'${AUFS_WH_PFX}':/: - ') - test -e "$dst/$f" || echo "$wh" - done | - # -v - $RsyncWh --files-from=- ./ "$2" - cd "$OLDPWD" -} - -copy() -{ - $Copy $@ "$mntpnt"/ "$dst" -} - -_move() -{ - set +x - test $hinotify -ne 1 && echo ${me}: warning, -i is not specified - src_is_nfs=0 - test $(stat -f -c %T "$src") = nfs && src_is_nfs=1 - set $quiet - - $Move $@ && - eval $(FindForRm "$src") | - { - if [ $src_is_nfs -eq 1 ] - then - mount -o remount "$mntpnt" - mount -o remount "$src" - fi - xargs -r0 rm -fr #-v - } -} - -move() -{ - _move $@ "$mntpnt"/ "$dst" -} - -move_with_wh() -{ - { - set +x - MoveWh "$src" "$dst" - set $quiet - } && - move --exclude=${AUFS_WH_PFX}\* -} - -# backward compatibility -move_w() -{ - move_with_wh $@ -} - -Usage() -{ - t=$(FindForRm src_branch | sed -e ' - s/"//g - $b - s/$/ \\/') - - cat <<- EOF - $me Options move | move_with_wh | copy \\ - mntpnt src_branch dst_branch [ options for rsync ] - - generic form: - $me [ -w | --wh ] [ -i | --inotify ] Options \\ - mntpnt cmd [ parameters for cmd ] - - Options: - [ -n | --dry_run ] - [ -q | --quiet ] - - The dst_branch must be mounted as writable. - During the operation, the mntpnt is set readonly. - If you are opening a file for writing on the writable branch, - you need to close the file before invoking this script. - The -w or --wh option requires CONFIG_AUFS_SHWH enabled. - The -i or --inotify option requires CONFIG_AUFS_HINOTIFY enabled. - - 'copy' is a shortcut for - $me mntpnt \\ - $Copy mntpnt/ dst_branch - 'move' is a shortcut for - $me mntpnt \\ - "$Move \\ - mntpnt/ dst_branch && \\ - $t |\\ - xargs -r0 rm -fr" - Note: in most cases, you will need '-i' option, and - find(1) is invoked by $me only when rsync(1) - succeded. - 'move_with_wh' is a simple variation of 'move' which moves - whiteouts separately before the actual 'move'. - - If you execute this script under linux-2.6.24 or earlier, the - kernel may produce a harmless warning "inotify.c:NNN - set_dentry_child_flags()". The message was already removed in - linux-2.6.25. - - examples: - - Copy and reflect all the modification (modifed files, newly - created and removed ones) in the upper branch to the lower - branch. This operation is for aufs which has only 2 branches, - and mainly for a system shutdown script. - All files on the upper branch remain. - - $ sudo $me copy /your/aufs /your/upper_branch /your/lower_branch - - - Like above (2 branches), move and reflect all modifications - from upper to lower. Almost all files on the upper branch will - be removed. You can still use this aufs after the - operation. But the inode number may be changed. If your - application which depends upon the inode number was running at - that time, it may not work correctly. - - $ sudo $me move /your/aufs /your/upper_branch /your/lower_branch - EOF - -# - Like above (2 branches), generate a new middle layer like a -# snapshot including whiteouts and make the upper_branch almost -# empty, but untouch the lower_branch. -# -# $ img=/hda1/a.ext2 -# $ dd if=/dev/zero of=\$img bs=4k count=1k -# $ mkfs -t ext2 -F \$img -# $ sudo mount -o rw,loop \$img /your/new_branch -# $ sudo mount -o remount,ins:1:/your/new_branch=ro+wh /your/aufs -# $ sudo $me _move /your/aufs /your/upper_branch /your/lower_branch \\ -# "--remove-source-files \\ -# --exclude=$AUFS_WH_BASE \\ -# --exclude=$AUFS_WH_PLINKDIR \\ -# --exclude=$AUFS_WH_TMPDIR \\ -# /your/upper_branch/ /your/new_branch; \\ -# mount -o remount,ro /your/new_branch" -# EOF -} - -######################################## - -wh=0 -hinotify=0 -quiet=-x -dry_run= -cmd= -cmd_opts= -for i -do - case $i in - -w|--wh) wh=1;; - -i|--inotify) hinotify=1;; - -n|--dry_run) dry_run=echo;; - -q|--quiet) quiet=+x;; - -h|--help) Usage; exit 0;; - --) shift; break;; - *) break;; - esac - shift -done - -test $# -lt 2 && Usage 1>&2 && exit 1 -case "$1" in -_move|move|copy|move_w|move_with_wh) |