On 09/06/2017 01:31 PM, Austin S. Hemmelgarn wrote: > On 2017-09-05 15:05, Goffredo Baroncelli wrote: >> On 09/05/2017 10:19 AM, Qu Wenruo wrote: >>> >>> >>> On 2017年09月05日 02:08, David Sterba wrote: >>>> On Mon, Sep 04, 2017 at 03:41:05PM +0900, Qu Wenruo wrote: >>>>> mkfs.btrfs --rootdir provides user a method to generate btrfs with >>>>> pre-written content while without the need of root privilege. >>>>> >>>>> However the code is quite old and doesn't get much review or test. >>>>> This makes some strange behavior, from customized chunk allocation >>>>> (which uses the reserved 0~1M device space) to lack of special file >>>>> handler (Fixed in previous 2 patches). >>>> >>>> The cleanup in this area is most welcome. The patches look good after a >>>> quick look, I'll do another review round. >>> >>> To save you some time, I found that my rework can't create new image which >>> old --rootdir can do. So it's still not completely the same behavior. >>> I can fix it by creating a large sparse file first and then truncate it >>> using current method easily. >>> >>> But this really concerns me, do we need to shrink the fs? >> >> I still fatigue to understand in what "mkfs.btrfs --rootdir" would be better >> than a "simple tar...."; >> >> in the first case I have to do >> a1) mkfs.btrfs --root-dir.... (create the archive) >> a2) dd (copy and truncate the image and store it in the archive) >> a3) dd (take the archived image, and restore it) >> a4) btrfs fi resize (expand the image) > The primary use case for this is to generate installation images. Using this > method removes the need for tar in the installation environment, and if you > defer step a4 until the first boot of the system, it also removes the need to > have btrfs-progs in the installation environment. Taken together, that's a > pretty significant space savings.
Sorry but I don't understand. If you reach the step a3; you have: - the final disk, and an environment fully working. So I am still inclined to think that using "mkfs.btrfs --root-dir" is more complicated in *this case*. > > It's also somewhat useful for creating minimalistic seed device images, which > have a couple of interesting uses, namely: > > * Base system images for 'factory reset'. The general principal is simple, > your base system is a seed device, plus a storage device associated with it. > When you want to do a factory reset, you wipe the storage partition, and > recreate an empty one associated with the seed image. This usage pretty much > requires a minimally sized filesystem, as anything more wastes space that > would be otherwise usable by the end user. > > * Seed-device based install images. The general concept for this has been > tossed around a couple of times before. You start with a minimal seed > device, boot to a live system using that and a temporary in-memory device for > root, set up the persistent storage, re-balance everything to persistent > storage, then remove the seed device and in-memory device so the user can > keep using the system without needing to reboot. This also needs a > minimalistic image, for the same reason any install disc needs to have a > minimal base image. For the above cases I agree that this could be useful to have "--rootdir" > > Note that without resize being able to shrink chunks (and ideally completely > shrink them so there is no slack space in the FS), you have to use a hex > editor to get a truly minimalistic filesystem image. >> >> in the second case I have to >> b1) tar cf ... (create the image an store it in the archive, this is a1+a2) >> b2) mkfs,btrfs (create the filesystem with the final size) >> b3) tar xf ... (take the archived image and restore it) >> >> >> However the code is already written (and it seems simple enough), so a >> possible compromise could be to have the "shrinking" only if another option >> is passed; eg. >> >> mkfs.btrfs --root ... --> populate the filesystem >> mkfs.btrfs --shrink --root --> populate and shrink the filesystem >> >> however I find this useful only if it is possible to creating the filesystem >> in a file; ie. >> >> mkfs.btrfs --shrink --root <path-to-source-fs> <file-to-be-created> >> >> where <file-to-be-created> doesn't have to exists before mkfs.btrfs, and >> after >> a) <file-to-be-created> contains the image >> b) <file-to-be-created> is the smallest possible size. >> >> Definitely I don't like the truncate done by the operator by hand after the >> mkfs.btrfs (current behavior). > FWIW, the current release behavior doesn't require the truncate, and properly > generates the file for the filesystem. If you don't do truncate, you have the fully partition... Or there is something that I miss ? [...] -- gpg @keyserver.linux.it: Goffredo Baroncelli <kreijackATinwind.it> Key fingerprint BBF5 1610 0B64 DAC6 5F7D 17B2 0EDA 9B37 8B82 E0B5 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html