From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751172AbWCCOXh (ORCPT ); Fri, 3 Mar 2006 09:23:37 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751180AbWCCOXh (ORCPT ); Fri, 3 Mar 2006 09:23:37 -0500 Received: from e36.co.us.ibm.com ([32.97.110.154]:60627 "EHLO e36.co.us.ibm.com") by vger.kernel.org with ESMTP id S1751172AbWCCOXh (ORCPT ); Fri, 3 Mar 2006 09:23:37 -0500 From: Kevin Corry Organization: IBM To: linux-kernel@vger.kernel.org Subject: Re: is there a COW inside the kernel ? Date: Fri, 3 Mar 2006 08:28:59 -0600 User-Agent: KMail/1.8.3 Cc: "roland" References: <043101c63e9c$86e9d710$0200000a@aldipc> In-Reply-To: <043101c63e9c$86e9d710$0200000a@aldipc> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200603030828.59567.kevcorry@us.ibm.com> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org On Fri March 3 2006 2:29 am, roland wrote: > hello ! > > is there an equivalent of something like > > cowloop ( http://www.atconsultancy.nl/cowloop/total.html ) or md based cow > device ( http://www.cl.cam.ac.uk/users/br260/doc/report.pdf ), > > i.e. a feature called "Copy On Write Blockdevice" inside the current or the > near-future mainline kernel (besides UserModeLinux Arch)? Device-Mapper has a snapshot module, which is used by LVM and EVMS. You can also use dmsetup if you want lower-level access than provided by the volume managers. To do the equivalent of the cowloop driver that you linked to above, you could do something like this: Say you have a read-only block-device (say a cd-rom) at /dev/hdc. And you have a small disk partition, /dev/hdb1, that you want to use for your "COW file". Run: cow_size=`blockdev --getsize /dev/hdc` chunk_size=64 # Size of each copied-on-write chunk, in 512 byte sectors cow_name="my_cow_dev" echo "0 $cow_size snapshot /dev/hdc /dev/hdb1 p $chunk_size" | \ dmsetup create $cow_name This will give you a device called /dev/mapper/$cow_name. Presuming /dev/hdc has a filesystem on it, you can mount /dev/mapper/$cow_name and get a read-write version of the filesystem on /dev/hdc, where updates to the filesystem will be stored on /dev/hdb1. The size of /dev/hdb1 can be significantly smaller than /dev/hdc, depending on the amount of writes you expect to happen on /dev/mapper/$cow_name. While this device is active, don't try to mount /dev/hdc read-write (assuming that's possible), or it will corrupt the view of /dev/mapper/$cow_name. If you need read-write access to both devices simultaneously, you'll probably just want to use LVM or EVMS and create snapshot volumes, since manually activating that kind of setup with dmsetup is incredibly tricky. Use "dmsetup remove $cow_name" to deactivate the device. > i would find this useful for several purpose, but i don`t want to patch my > system with 3rd party drivers or "non-standard" stuff - or even recompile > the kernel. This should work with any recent 2.6 kernel. You'll also need to have the device-mapper package installed, which should be available with any recent Linux distro. -- Kevin Corry kevcorry@us.ibm.com http://www.ibm.com/linux/ http://evms.sourceforge.net/