--- /dev/null
+=========================================================
+¤³¤ì¤Ï¡¢
+Linux-3.4.1/Documentation/filesystems/exofs.txt ¤ÎÏÂÌõ¤Ç¤¹¡£
+ËÝÌõÃÄÂΡ§ JF ¥×¥í¥¸¥§¥¯¥È < http://linuxjf.sourceforge.jp/ >
+¹¹¿·Æü ¡§ 2012/09/03
+ËÝÌõ¼Ô ¡§ Seiji Kaneko < skaneko at a2 dot mbn dot or dot jp >
+ººÆÉ¼Ô ¡§ Masanori Kobayasi < zap03216 at nifty dot ne dot jp >
+=========================================================
+===============================================================================
+#WHAT IS EXOFS?
+EXOFS ¤È¤Ï²¿¤«
+===============================================================================
+
+#exofs is a file system that uses an OSD and exports the API of a normal Linux
+#file system. Users access exofs like any other local file system, and exofs
+#will in turn issue commands to the local OSD initiator.
+exofs ¤È¤Ï OSD ¤òÍѤ¤¡¢Ä̾ï¤Î Linux ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î API ¤ò¸ø³«¤·¤¿¥Õ
+¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ç¤¹¡£exofs ¤ËÂФ¹¤ë¥æ¡¼¥¶¥¢¥¯¥»¥¹¤Ï¾¤Î¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¥·
+¥¹¥Æ¥à¤Ø¤Î¥¢¥¯¥»¥¹¤ÈƱ¤¸¤è¤¦¤Ë¹Ô¤¤¡¢exofs ¤Ï¤½¤Î¥¢¥¯¥»¥¹¤ò¥í¡¼¥«¥ë¤Î OSD
+¥¤¥Ë¥·¥¨¡¼¥¿¤Ø¤Î¥³¥Þ¥ó¥É¤È¤·¤Æ¼Â¹Ô¤·¤Þ¤¹¡£
+
+#OSD is a new T10 command set that views storage devices not as a large/flat
+#array of sectors but as a container of objects, each having a length, quota,
+#time attributes and more. Each object is addressed by a 64bit ID, and is
+#contained in a 64bit ID partition. Each object has associated attributes
+#attached to it, which are integral part of the object and provide metadata about
+#the object. The standard defines some common obligatory attributes, but user
+#attributes can be added as needed.
+OSD ¤È¤Ï¡¢¿·¤·¤¤ T10 ¥³¥Þ¥ó¥É¥»¥Ã¥È¤Ç¡¢¥¹¥È¥ì¡¼¥¸¥Ç¥Ð¥¤¥¹¤òµðÂç¤Ç¥Õ¥é¥Ã
+¥È¤Ê¥»¥¯¥¿¤ÎÇÛÎó¤È¤·¤Æ¤Ç¤Ï¤Ê¤¯¡¢¥µ¥¤¥º¤ä¥¯¥ª¡¼¥¿¤ä»þ´Ö´Ø·¸¤Î°À¤Ê¤É¤ò»ý
+¤Ã¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Î³ÊǼÀè¤È¤·¤Æ°·¤¦¤â¤Î¤Ç¤¹¡£³Æ¥ª¥Ö¥¸¥§¥¯¥È¤Ï 64 ¥Ó¥Ã¥È¤Î
+¼±Ê̻Ҥǥ¢¥É¥ì¥¹¤µ¤ì¡¢64 bit ¼±Ê̻Ҥò¤â¤Ä¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë´Þ¤Þ¤ì¤Þ¤¹¡£
+³Æ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ï´ØÏ¢ÉÕ¤±¤é¤ì¤¿ÉÕ°°À¤¬Éղ䵤졢¤³¤Î°À¤Ï¥ª¥Ö¥¸¥§¥¯
+¥È¤ËÅý¹ç¤µ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Î°ìÉô¤È¤·¤Æ¡¢¤½¤Î¥á¥¿¥Ç¡¼¥¿¤ò³ÊǼ¤·¤Þ¤¹¡£
+ɸ½à¤Ë¤Ï´ö¤Ä¤«¤Î¶¦Ä̤Îɬ¿Ü°À¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢É¬Íפ˱þ¤¸¤Æ¥æ¡¼¥¶Äê
+µÁ°À¤ò²Ã¤¨¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£
+
+===============================================================================
+#ENVIRONMENT
+Æ°ºî´Ä¶
+===============================================================================
+
+#To use this file system, you need to have an object store to run it on. You
+#may download a target from:
+¤³¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò»È¤¦¤Ë¤Ï¡¢¤³¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÇÍѤ¤¤ë¤¿¤á¤Î¥ª¥Ö¥¸
+¥§¥¯¥È¥¹¥È¥¢¤¬É¬ÍפǤ¹¡£¥¿¡¼¥²¥Ã¥È¤ò°Ê²¼¤«¤é¥À¥¦¥ó¥í¡¼¥É¤·¤Æ»È¤¦¤³¤È¤â²Ä
+ǽ¤Ç¤¹¡£
+
+http://open-osd.org
+
+#See Documentation/scsi/osd.txt for how to setup a working osd environment.
+osd ´Ä¶¤òÀßÄꤷ¤ÆÆ°¤«¤¹¤¿¤á¤Î¼ê½ç¤Ë¤Ä¤¤¤Æ¤Ï¡¢Documentation/scsi/osd.txt
+¤ò»²¾È¤¯¤À¤µ¤¤¡£
+
+===============================================================================
+#USAGE
+ÍøÍÑÊýË¡
+===============================================================================
+
+#1. Download and compile exofs and open-osd initiator:
+# You need an external Kernel source tree or kernel headers from your
+# distribution. (anything based on 2.6.26 or later).
+1. exofs ¤È open-osd ¥¤¥Ë¥·¥¨¡¼¥¿¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë:
+ »È¤Ã¤Æ¤¤¤ë¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤ÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤ë¥«¡¼¥Í¥ë¥½¡¼¥¹¥Ä¥ê¡¼
+ ¤Þ¤¿¤Ï¥«¡¼¥Í¥ë¥Ø¥Ã¥À (2.6.26 ¤Þ¤¿¤Ï¤½¤ì°Ê¹ß¤Ê¤é¤É¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤â²Ä)
+ ¤¬ÊÌÅÓɬÍפǤ¹¡£
+
+# a. download open-osd including exofs source using:
+ a. exofs ¥½¡¼¥¹¤ò´Þ¤à open-osd ¤ò°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¡£
+ [parent-directory]$ git clone git://git.open-osd.org/open-osd.git
+
+# b. Build the library module like this:
+ b. ¥é¥¤¥Ö¥é¥ê¥â¥¸¥å¡¼¥ë¤ò°Ê²¼¤Î¥³¥Þ¥ó¥É¤ÇºîÀ®¤¹¤ë¡£
+ [parent-directory]$ make -C KSRC=$(KER_DIR) open-osd
+
+# This will build both the open-osd initiator as well as the exofs kernel
+# module. Use whatever parameters you compiled your Kernel with and
+# $(KER_DIR) above pointing to the Kernel you compile against. See the file
+# open-osd/top-level-Makefile for an example.
+ ¤³¤ì¤Ë¤è¤ê¡¢open-osd ¥¤¥Ë¥·¥¨¡¼¥¿¤È exofs ¥«¡¼¥Í¥ë¥â¥¸¥å¡¼¥ë¤Îξ
+ Êý¤¬¥Ó¥ë¥É¤µ¤ì¤Þ¤¹¡£¥«¡¼¥Í¥ë¥³¥ó¥Ñ¥¤¥ë»þ¤ËÍ¿¤¨¤Æ¤¤¤ë¥Ñ¥é¥á¡¼¥¿¤Ë
+ ²Ã¤¨¡¢¥³¥ó¥Ñ¥¤¥ëÂоݤȤ¹¤ë¥«¡¼¥Í¥ë¤ò»Ø¤¹ $(KER_DIR) ¤òÀßÄꤷ¤Æ¤¯
+ ¤À¤µ¤¤¡£Îã¤Ï open-osd/top-level-Makefile ¤ò»²¾È¤¯¤À¤µ¤¤¡£
+
+#2. Get the OSD initiator and target set up properly, and login to the target.
+# See Documentation/scsi/osd.txt for farther instructions. Also see ./do-osd
+# for example script that does all these steps.
+2. OSD ¥¤¥Ë¥·¥¨¡¼¥¿¤È¥¿¡¼¥²¥Ã¥È¤òŬÀÚ¤ËÀßÄꤷ¡¢¥¿¡¼¥²¥Ã¥È¤Ë¥í¥°¥¤¥ó¤·
+¤Þ¤¹¡£ÀßÄê¼ê½ç¤Î¾ÜºÙ¤Ï Documentation/scsi/osd.txt ¤ò»²¾È¤¯¤À¤µ¤¤¡£¤Þ
+¤¿¡¢¤³¤Î¼ê½ç¤ÎÁ´¤Æ¤ò¼Â¹Ô¤¹¤ë¥¹¥¯¥ê¥×¥È¤ÎÎã¤Ç¤¢¤ë ./do-osd ¤ò¤´Í÷¤¯¤À¤µ¤¤¡£
+
+#3. Insmod the exofs.ko module:
+# [exofs]$ insmod exofs.ko
+3. exofs.ko ¥â¥¸¥å¡¼¥ë¤ò insmod ¤¹¤ë¡£
+ [exofs]$ insmod exofs.ko
+
+#4. Make sure the directory where you want to mount exists. If not, create it.
+# (For example, mkdir /mnt/exofs)
+4. ¥Þ¥¦¥ó¥ÈÀè¤Î¥Ç¥£¥ì¥¯¥È¥ê¤¬Â¸ºß¤¹¤ë¤³¤È¤ò³Îǧ¤·¤Þ¤¹¡£¤Ê¤¤¾ì¹ç¤ÏºîÀ®
+¤·¤Þ¤¹ (Î㤨¤Ð¡¢mkdir /mnt/exofs)¡£
+
+#5. At first run you will need to invoke the mkfs.exofs application
+5. ½é²ó¤Î¼Â¹Ô¤Ç¤Ï¡¢mkfs.exofs ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¼Â¹Ô¤¬É¬Íפˤʤë¤Ç¤·
+¤ç¤¦¡£
+# As an example, this will create the file system on:
+ Î㤨¤Ð¡¢¼¡¤Î¥³¥Þ¥ó¥É¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò /dev/osd0 ¤Î ¥Ñ¡¼¥Æ¥£¥·¥ç
+ ¥ó ID 65536 ¾å¤ËºîÀ®¤·¤Þ¤¹¡£
+
+ mkfs.exofs --pid=65536 --format /dev/osd0
+
+# The --format is optional. If not specified no OSD_FORMAT will be
+# performed and a clean file system will be created in the specified pid,
+# in the available space of the target. (Use --format=size_in_meg to limit
+# the total LUN space available)
+ --format ¤Ï¥ª¥×¥·¥ç¥ó¤Ç¡¢»ØÄꤷ¤Ê¤¤¾ì¹ç¤Ë¤Ï OSD_FORMAT ¤¬¼Â¹Ô¤µ¤ì
+ ¤º¡¢»ØÄꤵ¤ì¤¿ pid ¤Ç¥¯¥ê¡¼¥ó¤Ê¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤¬¡¢¥¿¡¼¥²¥Ã¥È¤ÎÄó¶¡
+ ¤¹¤ëÎΰè (Á´ÂÎ) ¤ò»È¤Ã¤ÆºîÀ®¤µ¤ì¤Þ¤¹ (»ÈÍѤ¹¤ë LUN ÎΰèÁ´ÂΤΥµ¥¤¥º
+ ¤òÀ©¸Â¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢--format=size_in_meg ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤)¡£
+
+# If pid already exists, it will be deleted and a new one will be created in
+# its place. Be careful.
+ pid ¤¬´û¤Ë¸ºß¤¹¤ë¾ì¹ç¤Ë¤Ïºï½ü¤µ¤ì¡¢¿·¤·¤¤ pid ¤¬ºîÀ®¤µ¤ì¤Æ¾å½ñ¤
+ ¤µ¤ì¤Þ¤¹¡£Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+# An exofs lives inside a single OSD partition. You can create multiple exofs
+# filesystems on the same device using multiple pids.
+ exofs ¤Ïñ°ì¤Î OSD ¥Ñ¡¼¥Æ¥£¥·¥ç¥óÆâ¤ËÃÖ¤«¤ì¤Þ¤¹¡£Ê£¿ô¤Î pid ¤òÍÑ
+ ¤¤¤ì¤Ð¡¢Æ±¤¸¥Ç¥Ð¥¤¥¹¤ËÊ£¿ô¤Î exofs ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤òºîÀ®²Äǽ¤Ç¤¹¡£
+
+# (run mkfs.exofs without any parameters for usage help message)
+ (mkfs.exofs ¤ò¥Ñ¥é¥á¡¼¥¿¤Ê¤·¤Ç¼Â¹Ô¤·¤¿¾ì¹ç¡¢ÍøÍÑÊýË¡¤Î¥Ø¥ë¥×¥á¥Ã
+ ¥»¡¼¥¸¤¬É½¼¨¤µ¤ì¤Þ¤¹)¡£
+
+#6. Mount the file system.
+6. ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò¥Þ¥¦¥ó¥È¤·¤Þ¤¹¡£
+
+# For example, to mount /dev/osd0, partition ID 0x10000 on /mnt/exofs:
+ Î㤨¤Ð¡¢/dev/osd0 ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó ID 0x10000 ¤ò /mnt/exofs ¤Ë¥Þ
+ ¥¦¥ó¥È¤¹¤ë¤Ë¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£
+
+ mount -t exofs -o pid=65536 /dev/osd0 /mnt/exofs/
+
+#7. For reference (See do-exofs example script):
+# do-exofs start - an example of how to perform the above steps.
+# do-exofs stop - an example of how to unmount the file system.
+# do-exofs format - an example of how to format and mkfs a new exofs.
+7. »²¹ÍÎã (do-exofs ¥¹¥¯¥ê¥×¥ÈÎã¤ò»²¾È¤¯¤À¤µ¤¤)
+ do-exofs start - ¾åµ¤Î¼ê½ç¤ò¼Â¹Ô¤¹¤ëÊýË¡¤ÎÎã
+ do-exofs stop - ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥¢¥ó¥Þ¥¦¥ó¥È¤ò¼Â¹Ô¤¹¤ëÊý
+ Ë¡¤ÎÎã
+ do-exofs format - ¿·¤·¤¤ exofs ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤È mkfs ¤ò¼Â¹Ô
+ ¤¹¤ëÊýË¡¤ÎÎã
+
+#8. Extra compilation flags (uncomment in fs/exofs/Kbuild):
+# CONFIG_EXOFS_DEBUG - for debug messages and extra checks.
+8. ÄɲäΥ³¥ó¥Ñ¥¤¥ì¡¼¥·¥ç¥ó¥Õ¥é¥° (fs/exofs/Kbuild Æâ¤Ç¥¢¥ó¥³¥á¥ó¥È)
+ CONFIG_EXOFS_DEBUG - ¥Ç¥Ð¥Ã¥°¥á¥Ã¥»¡¼¥¸¤ÈÆÃÊ̤ΥÁ¥§¥Ã¥¯¤ÎÄɲÃ
+
+===============================================================================
+#exofs mount options
+exofs ¥Þ¥¦¥ó¥È¥ª¥×¥·¥ç¥ó
+===============================================================================
+#Similar to any mount command:
+¾¤Î¥Þ¥¦¥ó¥È¥³¥Þ¥ó¥É¤ÈƱÍͤǤ¹¡§
+ mount -t exofs -o exofs_options /dev/osdX mount_exofs_directory
+
+#Where:
+¤³¤³¤Ç¤Î¥ª¥×¥·¥ç¥ó¤ÎÀâÌÀ¡§
+# -t exofs: specifies the exofs file system
+ -t exofs: exofs ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò»ØÄꤷ¤Þ¤¹¡£
+
+# /dev/osdX: X is a decimal number. /dev/osdX was created after a successful
+# login into an OSD target.
+ /dev/osdX: X ¤Ï½½¿Ê¿ô¤Ç¤¹¡£/dev/osdX ¤Ï OSD ¥¿¡¼¥²¥Ã¥È¤Ë¥í¥°¥¤¥ó
+ ¤¬À®¸ù¤·¤¿¸å¤ËºîÀ®¤µ¤ì¤Þ¤¹¡£
+
+# mount_exofs_directory: The directory to mount the file system on
+ mount_exofs_directory: ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò¥Þ¥¦¥ó¥È¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê
+
+# exofs specific options: Options are separated by commas (,)
+ exofs ¸ÇͤΥª¥×¥·¥ç¥ó: ¥ª¥×¥·¥ç¥ó¤Ï¥«¥ó¥Þ (,) ¤Ç¶èÀÚ¤é¤ì¤Þ¤¹¡£
+# pid=<integer> - The partition number to mount/create as
+# container of the filesystem.
+# This option is mandatory. integer can be
+# Hex by pre-pending an 0x to the number.
+# osdname=<id> - Mount by a device's osdname.
+# osdname is usually a 36 character uuid of the
+# form "d2683732-c906-4ee1-9dbd-c10c27bb40df".
+# It is one of the device's uuid specified in the
+# mkfs.exofs format command.
+# If this option is specified then the /dev/osdX
+# above can be empty and is ignored.
+# to=<integer> - Timeout in ticks for a single command.
+# default is (60 * HZ) [for debugging only]
+ pid=<À°¿ô> - ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥³¥ó¥Æ¥Ê¤ò¥Þ¥¦¥ó¥È/
+ ºîÀ®¤¹¤ë¥Ñ¡¼¥Æ¥£¥·¥ç¥óÈֹ档
+ ¤³¤Î¥ª¥×¥·¥ç¥ó¤Ïɬ¿Ü¤Ç¤¹¡£À°¿ôÃͤȤ·¤Æ¡¢ÀèƬ
+ ¤Ë 0x ¤ò¤Ä¤±¤ë¤³¤È¤Ë¤è¤ê 16¿Ê¿ô¤ò»ØÄꤹ¤ë¤³
+ ¤È¤¬²Äǽ¤Ç¤¹¡£
+ osdname=<id> - ¥Ç¥Ð¥¤¥¹¤Î osdname.¤ò»È¤¤¥Þ¥¦¥ó¥È¤¹¤ë¡£
+ osdname ¤Ï¡¢Ä̾ï
+ "d2683732-c906-4ee1-9dbd-c10c27bb40df".
+ ¤Î¤è¤¦¤Ê·Á¼°¤Î 36 ʸ»ú¤Îʸ»úÎó¤Ç¤¹¡£
+ ¤³¤ì¤Ï mkfs.exofs ¥Õ¥©¡¼¥Þ¥Ã¥È¥³¥Þ¥ó¥É¤Ç»ØÄê
+ ¤·¤¿¥Ç¥Ð¥¤¥¹¤Î uuid ¤Î¤¦¤Á¤Î°ì¤Ä¤Ç¤¹¡£
+ ¤³¤Î¥ª¥×¥·¥ç¥ó¤ò /dev/osdX ¤Ë»ØÄꤷ¤¿¾ì¹ç¡¢
+ uuid ¤Ï¶õ¤Ç¤è¤¯¡¢»ØÄꤷ¤Æ¤â̵»ë¤µ¤ì¤Þ¤¹¡£
+ to=<À°¿ô> - °ì¤Ä¤Î¥³¥Þ¥ó¥É¤¬¥¿¥¤¥à¥¢¥¦¥È¤¹¤ë¤Þ¤Ç
+ ¤Î¥Æ¥£¥Ã¥¯¿ô¡£
+ ´ûÄêÃÍ¤Ï (60 * HZ) ¤Ç¤¹ [¥Ç¥Ð¥Ã¥¯ÀìÍÑ]
+
+===============================================================================
+#DESIGN
+Àß·×
+===============================================================================
+
+#* The file system control block (AKA on-disk superblock) resides in an object
+# with a special ID (defined in common.h).
+# Information included in the file system control block is used to fill the
+# in-memory superblock structure at mount time. This object is created before
+# the file system is used by mkexofs.c. It contains information such as:
+# - The file system's magic number
+# - The next inode number to be allocated
+* ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥àÀ©¸æ¥Ö¥í¥Ã¥¯ (¥Ç¥£¥¹¥¯¾å¤Î¥¹¡¼¥Ñ¡¼¥Ö¥í¥Ã¥¯) ¤Ï¡¢ÆÃÊ̤Ê
+ ID (common.h ¤ËÄêµÁ¤¬¤¢¤ê¤Þ¤¹) ¤ò»ý¤Ä¥ª¥Ö¥¸¥§¥¯¥È¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
+ ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥àÀ©¸æ¥Ö¥í¥Ã¥¯¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤ë¾ðÊó¤Ï¡¢¥Þ¥¦¥ó¥È»þ¤Ë¥á¥â¥ê
+ ¾å¤Î¥¹¡¼¥Ñ¡¼¥Ö¥í¥Ã¥¯¹½Â¤ÂΤ˽ñ¤¹þ¤àºÝ¤ËÍѤ¤¤é¤ì¤Þ¤¹¡£¤³¤Î¥ª¥Ö¥¸
+ ¥§¥¯¥È¤Ï¡¢¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤¬ mkexofs.c ¤ÇÍѤ¤¤é¤ì¤ëÁ°¤ËºîÀ®¤µ¤ì¤Þ¤¹¡£
+ ¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ï°Ê²¼¤Î¾ðÊ󤬴ޤޤì¤Æ¤¤¤Þ¤¹¡£
+ - ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Þ¥¸¥Ã¥¯ÈÖ¹æ
+ - ¼¡¤Ë³ä¤êÅö¤Æ¤ë inode ÈÖ¹æ
+
+#* Each file resides in its own object and contains the data (and it will be
+# possible to extend the file over multiple objects, though this has not been
+# implemented yet).
+* ³Æ¥Õ¥¡¥¤¥ë¤ÏÂбþ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ë³ÊǼ¤µ¤ì¡¢¥Ç¡¼¥¿¤ò´Þ¤ß¤Þ¤¹ (¤½¤·¤Æ
+ ¾Íè¤ÏÊ£¿ô¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ëʬ³ä¤·¤Æ¥Õ¥¡¥¤¥ë¤ò³ÊǼ¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ëͽÄê
+ ¤Ç¤¹¤¬¡¢¸½ºß¤Ï̤¼ÂÁõ¤Ç¤¹)¡£
+
+#* A directory is treated as a file, and essentially contains a list of <file
+# name, inode #> pairs for files that are found in that directory. The object
+# IDs correspond to the files' inode numbers and will be allocated according to
+# a bitmap (stored in a separate object). Now they are allocated using a
+# counter.
+* ¥Ç¥£¥ì¥¯¥È¥ê¤Ï¥Õ¥¡¥¤¥ë¤È¤·¤Æ°·¤ï¤ì¡¢ËܼÁŪ¤Ë¤Ï¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ë¤¢¤ë¥Õ
+ ¥¡¥¤¥ë¤Î <¥Õ¥¡¥¤¥ë̾, inode ÈÖ¹æ> ÁȤΥꥹ¥È¤ò³ÊǼ¤·¤Æ¤¤¤Þ¤¹¡£¥ª¥Ö¥¸
+ ¥§¥¯¥È ID ¤Ï¥Õ¥¡¥¤¥ë¤Î inode ÈÖ¹æ¤ËÂбþ¤·¡¢¾Íè¤ÏÊ̤Υª¥Ö¥¸¥§¥¯¥È¤Ë
+ ³ÊǼ¤µ¤ì¤¿¥Ó¥Ã¥È¥Þ¥Ã¥×¤Ë½¾¤Ã¤Æ³ä¤êÅö¤Æ¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£Ã¢¤·¸½ºß
+ ¤Ï¥«¥¦¥ó¥¿¤ò»È¤Ã¤Æ³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤Þ¤¹¡£
+
+#* Each file's control block (AKA on-disk inode) is stored in its object's
+# attributes. This applies to both regular files and other types (directories,
+# device files, symlinks, etc.).
+* ³Æ¥Õ¥¡¥¤¥ë¤ÎÀ©¸æ¥Ö¥í¥Ã¥¯ (¥Ç¥£¥¹¥¯¾å¤Î inode) ¤Ï¥ª¥Ö¥¸¥§¥¯¥È¥¢¥È¥ê¥Ó
+ ¥å¡¼¥È¤Ë³ÊǼ¤µ¤ì¤Þ¤¹¡£¤³¤ì¤ÏÄ̾ï¥Õ¥¡¥¤¥ë¤È¤½¤Î¾¤Î¥¿¥¤¥× (¥Ç¥£¥ì¥¯¥È
+ ¥ê¡¢¥Ç¥Ð¥¤¥¹¥Õ¥¡¥¤¥ë¡¢¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤Ê¤É) ¤ÎξÊý¤ËŬÍѤµ¤ì¤Þ¤¹¡£
+
+#* Credentials are generated per object (inode and superblock) when they are
+# created in memory (read from disk or created). The credential works for all
+# operations and is used as long as the object remains in memory.
+* ¥¯¥ì¥Ç¥ó¥·¥ã¥ë¤Ï¥ª¥Ö¥¸¥§¥¯¥È (inode ¤È¥¹¡¼¥Ñ¡¼¥Ö¥í¥Ã¥¯) Ëè¤Ë¡¢¥á¥â
+ ¥êÆâ¤Ç¤ÎÀ¸À®»þ (¥Ç¥£¥¹¥¯¤«¤é¤ÎÆɤ߹þ¤ß¤Þ¤¿¤ÏºîÀ®»þ) ¤ËºîÀ®¤µ¤ì¤Þ¤¹¡£
+ ¥¯¥ì¥Ç¥ó¥·¥ã¥ë¤ÏÁ´¤Æ¤ÎÁàºî¤ÇƯ¤¡¢¥ª¥Ö¥¸¥§¥¯¥È¤¬¥á¥â¥êÆâ¤Ë¤¢¤ë´Ö
+ ¤Ï¤º¤Ã¤È»È¤ï¤ì¤Þ¤¹¡£
+
+#* Async OSD operations are used whenever possible, but the target may execute
+# them out of order. The operations that concern us are create, delete,
+# readpage, writepage, update_inode, and truncate. The following pairs of
+# operations should execute in the order written, and we need to prevent them
+# from executing in reverse order:
+* ²Äǽ¤Ê¸Â¤êÈóƱ´ü OSD Áàºî¤¬»È¤ï¤ì¤Þ¤¹¤¬¡¢¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¤³¤ì¤ò½ç½ø¤ò
+ ¼é¤é¤º¼Â¹Ô¤¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤³¤³¤ÇÂоݤȤʤëÁàºî¤È¤Ï¡¢create¡¢
+ delete¡¢readpage¡¢writepage¡¢update_inode¡¢truncate ¤Ç¤¹¡£°Ê²¼¤ÎÁàºî
+ ¤ÎÁȤϽñ¤«¤ì¤¿½ç½ø¤Ë¼Â¹Ô¤¹¤ë¤Ù¤¤Ç¤¹¤Î¤Ç¡¢½ç½ø¤¬µÕž¤¹¤ë¤³¤È¤òËɻߤ¹
+ ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
+# - The following are handled with the OBJ_CREATED and OBJ_2BCREATED
+# flags. OBJ_CREATED is set when we know the object exists on the OSD -
+# in create's callback function, and when we successfully do a read_inode.
+# OBJ_2BCREATED is set in the beginning of the create function, so we
+# know that we should wait.
+ - °Ê²¼¤Î½èÍý¤Ï OBJ_CREATED ¤È OBJ_2BCREATED ¥Õ¥é¥°¤ÇÀ©¸æ¤µ¤ì
+ ¤Þ¤¹¡£
+ ÂоݤȤʤ륪¥Ö¥¸¥§¥¯¥È¤¬ OSD ¤Ë¸ºß¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢create ¤Î
+ ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤Ç OBJ_CREATED ¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£¤Þ¤¿
+ read_inode ¤Î¼Â¹Ô¤¬À®¸ù¤·¤¿¾ì¹ç¤Ë¤Ï OBJ_2BCREATED ¤ò create
+ ´Ø¿ô¤ÎºÇ½é¤Ç¥»¥Ã¥È¤¹¤ë¤¿¤á¡¢ÂÔ¤ÄɬÍפ¬¤¢¤ë¤³¤È¤¬Ê¬¤«¤ê¤Þ¤¹¡£
+# - create/delete: delete should wait until the object is created
+# on the OSD.
+ - create/delete: delete ¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤¬ OSD ¤ÇºîÀ®
+ ¤µ¤ì¤ë¤Þ¤ÇÂԤĤ٤¤Ç¤¹¡£
+# - create/readpage: readpage should be able to return a page
+# full of zeroes in this case. If there was a write already
+# en-route (i.e. create, writepage, readpage) then the page
+# would be locked, and so it would really be the same as
+# create/writepage.
+ - create/readpage: readpage ¤Ï¡¢¤³¤Î¾ì¹ç 0 ¤ÇËä¤á¤é¤ì
+ ¤¿¥Ú¡¼¥¸¤òÊÖ¤»¤ë¤è¤¦¼ÂÁõ¤¹¤Ù¤¤Ç¤¹¡£´û¤Ë½ñ¤¹þ¤ß¤¬»Å
+ ³Ý¤«¤êÃæ¤Î¾ì¹ç (¤Ä¤Þ¤ê¡¢create¡¢writepage¡¢readpage
+ ¤Î½ç¤Ç¼Â¹Ô¤·¤Æ¤¤¤ë¾ì¹ç)¡¢¥Ú¡¼¥¸¤Ï¥í¥Ã¥¯¤µ¤ì¤ë¤Ç¤·¤ç
+ ¤¦¤«¤é¡¢¼ÂºÝ¤Î½èÍý¤Ï create/writepage ¤ÈƱ¤¸¤Ë¤Ê¤ê¤Þ
+ ¤¹¡£
+# - create/writepage: if writepage is called for a sync write, it
+# should wait until the object is created on the OSD.
+# Otherwise, it should just return.
+ - create/writepage: writepage ¤¬Æ±´ü½ñ¤¹þ¤ß¤È¤·¤Æ¼Â¹Ô
+ ¤µ¤ì¤¿¾ì¹ç¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È¤¬ OSD ¤ÇºîÀ®¤µ¤ì¤ë¤Þ¤ÇÂԤĤ٤¤Ç¤¹¡£
+ ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï¡¢Ã±¤ËÌá¤ë¤Ù¤¤Ç¤¹¡£
+# - create/truncate: truncate should wait until the object is
+# created on the OSD.
+ - create/truncate: truncate ¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤¬ OSD ¤Çºî
+ À®¤µ¤ì¤ë¤Þ¤Ç¤ÏÂԤĤ٤¤Ç¤¹¡£
+# - create/update_inode: update_inode should wait until the
+# object is created on the OSD.
+ - create/update_inode: update_inode ¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤¬
+ OSD ¤ÇºîÀ®¤µ¤ì¤ë¤Þ¤Ç¤ÏÂԤĤ٤¤Ç¤¹¡£
+# - Handled by VFS locks:
+ - VFS ¥í¥Ã¥¯¤Ç°·¤ï¤ì¤Þ¤¹
+# - readpage/delete: shouldn't happen because of page lock.
+# - writepage/delete: shouldn't happen because of page lock.
+# - readpage/writepage: shouldn't happen because of page lock.
+ - readpage/delete: ¥Ú¡¼¥¸¥í¥Ã¥¯¤Î¤¿¤á¡¢µ¯¤³¤é¤Ê¤¤¤Ï¤º
+ ¤Ç¤¹¡£
+ - writepage/delete: ¥Ú¡¼¥¸¥í¥Ã¥¯¤Î¤¿¤á¡¢µ¯¤³¤é¤Ê¤¤¤Ï¤º
+ ¤Ç¤¹¡£
+ - readpage/writepage: ¥Ú¡¼¥¸¥í¥Ã¥¯¤Î¤¿¤á¡¢µ¯¤³¤é¤Ê¤¤¤Ï
+ ¤º¤Ç¤¹¡£
+
+===============================================================================
+#LICENSE/COPYRIGHT
+¥é¥¤¥»¥ó¥¹/Ãøºî¸¢
+===============================================================================
+#The exofs file system is based on ext2 v0.5b (distributed with the Linux kernel
+#version 2.6.10). All files include the original copyrights, and the license
+#is GPL version 2 (only version 2, as is true for the Linux kernel). The
+#Linux kernel can be downloaded from www.kernel.org.
+exofs ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ï ext2 v0.5b (Linux ¥«¡¼¥Í¥ë¥Ð¡¼¥¸¥ç¥ó 2.6.10
+¤ÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤¿¤â¤Î) ¤ò¥Ù¡¼¥¹¤Ë¤·¤Æ¤¤¤Þ¤¹¡£Á´¤Æ¤Î¥Õ¥¡¥¤¥ë¤Ï¸µ¡¹¤ÎÃø
+ºî¸¢É½µ¤òÊݤäƤª¤ê¡¢¥é¥¤¥»¥ó¥¹¤Ï GPL ¥Ð¡¼¥¸¥ç¥ó 2 (Linux ¥«¡¼¥Í¥ë¤Ç
+¤Ï¡¢¥Ð¡¼¥¸¥ç¥ó 2 ¤Î¤ß¤Ç¤¹) ¤Ç¤¹¡£Linux ¥«¡¼¥Í¥ë¤Ï www.kernel.org ¤«¤é
+¥À¥¦¥ó¥í¡¼¥É²Äǽ¤Ç¤¹¡£
+