[linux-lvm] LVM1 on top of DRBD
Heinz J . Mauelshagen
mauelshagen at sistina.com
Thu Aug 21 08:15:02 UTC 2003
On Wed, Aug 20, 2003 at 04:49:47PM +0200, Joachim Banzhaf wrote:
> Am Mittwoch, 20. August 2003 15:31 schrieb Heinz J . Mauelshagen:
> > On Wed, Aug 20, 2003 at 01:54:36PM +0200, Joachim Banzhaf wrote:
> > > Am Mittwoch, 20. August 2003 12:46 schrieb Heinz J . Mauelshagen:
>
> > > > DRBD devices are just some other "local" ones for it.
> > >
> > > OK, but as i stated, I used them that way. LVM1 just seems to use the
> > > lower level devices drbd works on instead. That's what's bothering me.
> >
> > Ah, missed that point :(
> > LVM2 is your better option because it supports device name filters
> > in a config file rather than hard-coded ones.
>
> Well, I guess I have to - and hope for the best. Since I thought I had that
> filter implemented in LVM1 (see attached patch) and that did not work, my
> expectations aren't too high...
Well, what you implemented is a subset of what the LVM2 device name filters,
which are regular expression based can do for you :)
>
> > > Again, to clear the ground: Should it be possible at all to use pv's on
> > > top of drbd devices or am I forced to use drbd devices on top of lv's and
> > > loose things like online resize feature?
> > >
> > > Have you - or anybody reading the list - ever sucessfully used that
> > > scenario?
> >
> > I don't. List ?
>
>
>
>
> --- LVM/1.0.6/tools/lib/lvm_dir_cache.c 2002-04-26 09:52:49.000000000 +0200
> +++ LVM/1.0.6/tools/lib/lvm_dir_cache.with.ignore.c 2003-08-20 04:05:46.000000000 +0200
> @@ -45,6 +45,7 @@
> * 07/07/2001 - realloc now doubles the size of the cache [JT]
> * 17/12/2001 - make it find loop devices again [HM]
> * 01/22/2002 - fix broken whole device support [HM]
> + * 08/18/2003 - add ignore devices feature for lvm on drbd [jbanzhaf at ngi.de]
> *
> */
>
> @@ -52,6 +53,14 @@
> #include <liblvm.h>
>
>
> +#define IGNOREDFILE "/etc/lvmconf/ignored_devices"
> +
> +typedef struct ignored_dev {
> + char *name;
> + struct ignored_dev *next;
> +} ignored_dev_t;
> +
> +
> static void _scan_partitions();
> static void _scan_devs(int);
> static int _add(char *directory, char *devname);
> @@ -59,12 +68,17 @@
> static int _alloc();
> static int _is_present(dev_t rdev);
> static void _collapse_slashes(char *str);
> -
> +static void _read_ignored();
> +static void _free_ignored(ignored_dev_t **node);
> +static int _ignore(char *str);
>
> static dir_cache_t *_dir_cache;
> static int _cache_size;
> static int _array_size;
>
> +static ignored_dev_t *_ignored_head = NULL;
> +
> +
> /* devices *not* showing up in /proc/partitions must be scanned anyway */
> static char *_noprocdir[] = {
> LVM_DIR_PREFIX "loop",
> @@ -99,11 +113,13 @@
> }
>
> if (!_dir_cache) {
> + _read_ignored();
> _scan_partitions();
> if(!_cache_size)
> _scan_devs( TRUE);
> else
> _scan_devs( FALSE);
> + _free_ignored(&_ignored_head);
> }
>
> *dir_cache_ptr = _dir_cache;
> @@ -255,6 +271,9 @@
>
> debug_enter("lvm_add_dir_cache -- CALLED with %s\n", devpath);
>
> + if (_ignore(devpath))
> + goto out;
> +
> if (stat(devpath, &stat_b) == -1)
> goto out;
>
> @@ -348,3 +367,78 @@
>
> *str = *ptr;
> }
> +
> +static void _add_ignored(char *line, ignored_dev_t ***list_tail)
> +{
> + int len;
> + int add = 1;
> + ignored_dev_t *new_node;
> +
> + len = strlen(line);
> + if (line[len - 1] == '\n') {
> + line[len - 1] = '\0';
> + len--;
> + }
> +
> + debug_enter("_add_ignored -- CALLED with %s\n", line);
> +
> + new_node = (ignored_dev_t *)malloc(sizeof(ignored_dev_t));
> + if (new_node) {
> + new_node->name = strdup(line);
> + if (new_node->name) {
> + new_node->next = NULL;
> + **list_tail = new_node;
> + *list_tail = &new_node->next;
> + } else {
> + free(new_node);
> + add = 0;
> + }
> + } else {
> + add = 0;
> + }
> +
> + debug_leave("_add_ignored '%s' -- LEAVING with ret: %s\n", line, add ? "OK" : "ERROR");
> +}
> +
> +static void _read_ignored()
> +{
> + FILE *f;
> + char line[NAME_LEN];
> + ignored_dev_t **list_tail = &_ignored_head;
> +
> + if ( (f=fopen(IGNOREDFILE, "r")) != NULL ) {
> + while(fgets(line, sizeof(line), f)) {
> + if (line[0] != '\0' && line[0] != '\n' && line[0] != '#') {
> + _add_ignored(line, &list_tail);
> + }
> + }
> + fclose(f);
> + }
> +}
> +
> +static void _free_ignored(ignored_dev_t **curr)
> +{
> + if( *curr )
> + {
> + _free_ignored(&(*curr)->next);
> + free((*curr)->name);
> + free(*curr);
> + *curr = NULL;
> + }
> +}
> +
> +static int _ignore(char *str)
> +{
> + int rc = 0;
> + ignored_dev_t *curr = _ignored_head;
> +
> + while (curr) {
> + if (!strcmp(str, curr->name)) {
> + rc = 1;
> + break;
> + }
> + curr = curr->next;
> + }
> + return rc;
> +}
> +
--
Regards,
Heinz -- The LVM Guy --
*** Software bugs are stupid.
Nevertheless it needs not so stupid people to solve them ***
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Heinz Mauelshagen Sistina Software Inc.
Senior Consultant/Developer Am Sonnenhang 11
56242 Marienrachdorf
Germany
Mauelshagen at Sistina.com +49 2626 141200
FAX 924446
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
More information about the linux-lvm
mailing list