Просто может быть до 16 *1048576 sd
блочных устройств (, которых было бы всего 16 *256, когда dev _t был 16-битным ).
Код имеет:
for (i = 0; i < SD_MAJORS; i++) {
if (register_blkdev(sd_major(i), "sd") != 0)
continue;
majors++;
blk_register_region(sd_major(i), SD_MINORS, NULL,
sd_default_probe, NULL, NULL);
}
Чтобы зарегистрировать эти 16 старших номеров.
И:
/*
* More than enough for everybody ;) The huge number of majors
* is a leftover from 16bit dev_t days, we don't really need that
* much numberspace.
*/
#define SD_MAJORS 16
Где:
/*
* Device no to disk mapping:
*
* major disc2 disc p1
* |............|.............|....|....| <- dev_t
* 31 20 19 8 7 4 3 0
*
* Inside a major, we have 16k disks, however mapped non-
* contiguously. The first 16 disks are for major0, the next
* ones with major1,... Disk 256 is for major0 again, disk 272
* for major1,...
* As we stay compatible with our numbering scheme, we can reuse
* the well-know SCSI majors 8, 65--71, 136--143.
*/
static int sd_major(int major_idx)
{
switch (major_idx) {
case 0:
return SCSI_DISK0_MAJOR;
case 1... 7:
return SCSI_DISK1_MAJOR + major_idx - 1;
case 8... 15:
return SCSI_DISK8_MAJOR + major_idx - 8;
default:
BUG();
return 0; /* shut up gcc */
}
}
Который показывает, как распределяются основные и второстепенные.
Мы используем не CentOS, а Debian. ИМХО, лучше не паковать monit. Monit сильно изменился в последнее время (в 2019 году ). Особенно известно, что версия monit, упакованная в Debian, сильно отстает от текущей версии. Так как довольно легко загрузить и скомпилировать monit (с помощью обычных трех -шагов configure
, make
и make install
, и он не зависит от слишком большого количества пакетов разработки ), это должно быть предпочтительный метод.