Loop-Device

並聯迴路安裝

  • June 10, 2016

我正在做一個項目,我需要掛載 100 多個循環設備並將其合併到 AUFS 掛載點作為觀察,順序掛載 90 個循環設備需要 25 秒。

我正在尋找一種解決方案,通過並行安裝環路設備來最大限度地減少時間

我認為這很明顯,但是

typeset -i M=1
while [ $M -le 102 ]
 do
   mount mysourcedevice$M targetdir$M &
   let M++
done
wait

應該做的工作。在執行下一條命令之前,wait將等待所有子程序完成。

也許執行緒版本可能會更快一些,您必須自己調整mount()參數。

#include <stdio.h>
#include <pthread.h>
#include <sys/mount.h>
#include <string.h>
#include <errno.h>

#define DEVS 100

static void *mountt(void *d)
{
   int i = (int)d;
   char loop[48], mp[48];

   snprintf(loop, 47, "/dev/loop%d", i);
   snprintf(mp, 47, "/mnt/%d", i);

   if (mount(loop, mp, "ext2", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, "") < 0)
       fprintf(stderr, "mount[%d]: failed: %s\n", i, strerror(errno));

   return NULL;
}

int main(int argc, char **argv)
{
   int i;
   pthread_t tt[DEVS];

   for (i=0; i<DEVS; i++) {
       if (pthread_create( &tt[i], NULL, mountt, (void*)i) != 0)
           fprintf(stderr, "thread create[%d] failed: %s\n", i, strerror(errno));
   }

   for (i=0; i<DEVS; i++)
       pthread_join(tt[i], NULL);

   return 0;
}

gcc -O2 -Wall -o mountt mountt.c -lpthread

引用自:https://unix.stackexchange.com/questions/86085