We just finished migrating using 12 spools ext4 RAID5 for much less users
(6000) with quotas up to 3Gb.
It tooks a few days on line just rename mailboxes to another spool.
my script looks like this. Just take care no to abort it in the middle of a
rename. It would be better to add a handler for SIGUP/SIGTERM to exit
properly.
New spool are sp0, sp1 etc.. I check if it's an old spool then rename
mailboxes.

Hope this helps

Dom

#!/usr/bin/perl

use Cyrus::IMAP::Admin;
my $DEBUG=0;
my $quota=3072000; # 3 000 Mo selon horde

my %Hspools=(
   'a' => 'sp0',
   'b' => 'sp1',
   'c' => 'sp2',
   'd' => 'sp3',
   'e' => 'sp4',
   'f' => 'sp5',
   'g' => 'sp6',
   'h' => 'sp0',
   'i' => 'sp11',
   'j' => 'sp3',
   'k' => 'sp5',
   'l' => 'sp7',
   'm' => 'sp8',
   'n' => 'sp5',
   'o' => 'sp4',
   'p' => 'sp9',
   'q' => 'sp11',
   'r' => 'sp10',
   's' => 'sp4',
   't' => 'sp10',
   'u' => 'sp11',
   'v' => 'sp9',
   'w' => 'sp11',
   'x' => 'sp11',
   'y' => 'sp11',
   'z' => 'sp11',
);


### Connect IMAP
my $client = Cyrus::IMAP::Admin->new('127.0.0.1');
$client->authenticate( -user => 'cyrus', -password => 'xxxxxxx',-mechanism
=> "LOGIN") or die $client->error;

@res=`/usr/cyrus/bin/ctl_mboxlist -d /var/lib/imap/mailboxes.db`;
open (LOG,'>>/root/movebal.txt');
$i=0;
foreach (@res){
   if (/^user\.(\S+)\s+\d+\s+(\S+)\s+/){
      $user=$1;
      $spool=$2;
      next if $user=~/\./;
      next if $spool=~/^sp\d+/;
      if (IsUserOnline($user)){
         print "$user en ligne\n";
         next;
      }
      $i++;
      $lettre=substr($user,0,1);
      $client->setacl("user/$user", 'cyrus' => 'all');
      $client->setacl("user/$user/*", 'cyrus' => 'all');
      $client->rename("user/$user","user/$user",$Hspools{$lettre});
      $now=localtime;
      printf LOG "$now $user $spool $lettre $Hspools{$lettre}\n";
      if (defined($client->error)){
         printf LOG "Pb pour déplacer la bal $uid $Hspools{$lettre}:
",$client->error,"\n";
      }
      $client->setquota("user/$user",'STORAGE' => $quota);
   }
}
close LOG;

sub IsUserOnline{
   my ($user)=...@_;
   @ret=`grep "$user\tuser.$user" /var/lib/imap/proc/*`;
   foreach (@ret){
      return 1 if /$user/;
   }
}



2010/6/16 Nestor A Diaz <nes...@tiendalinux.com>

> Hello Cyrus People.
>
> I have been always a proud user of the cyrus email system, currently my
> larger cyrus installation is about 70K users, which have been working
> fine, however i need to make some adjustems to improve the resposiviness
> of the mailstore.
>
> At the begining i use only a default mailstore, on a ext3 formatted
> filesystem over a raid 10 / LVM, it works fine, however when it reaches
> the 32768 directories, (a limitation of ext3) i have to create another
> partition, and then another one, so i have currently 3 partitions in total.
>
> Having defined some criteria in order to group every user into a
> partition i will like some recomendations, taking in mind the current
> cyrus server tools which i currently don't know what are their current
> capabilities, my plan is to forget using cyrus partitions, and instead
> using LVM partitions and the propper links to the physical partitions
> from the logical one.
>
> So i currently have:
>
> partition-default : 30K users
> partition-alt1: 20K users
> partition-alt2 : 20K users.
>
> and then i will like to have just one partition:
>
> partition-default ext4 formatted with links to physical partitions based
> on the first letter [a-z] of the user.
>
> I think LVM is a great advantage, and in some way aliviate the need for
> cyrus partitions, i it will lead me deal with the grow of a partition
> and data administration so easy without too much downtime.
>
> So, it means that accordingly to this stragegy which seems to be the
> most simple for me, what would be the best technical path to accomplish
> a good migration ? allowusermoves: yes option and renamemailbox is
> enoguth to do this task ? what if i want to do this online ? can i ? how
> ? is there any script that will help me do that ?
>
> Any suggestions or migration histories are welcome !
>
> What about murder / perdition ? they make any sense in this configuration ?
>
> Keep this good work !
>
> Slds.
>
> --
> Nestor A. Diaz
> Ingeniero de Sistemas
> Tel. +57 1-485-3020 x 211
> Cel. +57 316-227-3593
> Tel. SIP: sip:2...@tiendalinux.com <sip%3a...@tiendalinux.com>
> Email/MSN: nes...@tiendalinux.com
> http://www.tiendalinux.com/
> Bogota, Colombia
>
> ----
> Cyrus Home Page: http://cyrusimap.web.cmu.edu/
> Cyrus Wiki/FAQ: http://cyrusimap.web.cmu.edu/twiki
> List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html
>



-- 
Dominique LALOT
Ingénieur Systèmes et Réseaux
http://annuaire.univmed.fr/showuser.php?uid=lalot
----
Cyrus Home Page: http://cyrusimap.web.cmu.edu/
Cyrus Wiki/FAQ: http://cyrusimap.web.cmu.edu/twiki
List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html

Reply via email to