Compaq Smart Array + fdisk, instalka + ruting

Blues blues w ds6.pg.gda.pl
Pon, 10 Cze 2002, 14:22:50 CEST


On Mon, 10 Jun 2002, Jakub Bogusz wrote:
> > > > >    W niedziele mialem do przeinstalowania serwer na RH. Sprzet mial hw
> > > > > raid na Smart Array 2. Pod RH fdisk pokazywal prawidlowe wartosci
> > > > > pojemnosci dysku, natomiast ten z instalatora PLD twierdzil, ze dysk
> > > > > ma 1 cylinder. Musialem sie przeprosic z partedem... Czy tylko u mnie
> > > > > sa takie kfiatki?
> > > > Wlasnie sprawdzilem po instalacji i wyglada na to, ze fdisk z
> > > > dystrybucji tez ma cos nie tak pod sufitem:
> > > A kernel masz z PLD, czy z kernel.org?
> > > fdisk (z niedystrybucyjnym kernelem, ale nie wiem czy to ma znaczenie[1])
> > > z RAID-em Myleksa też wariuje.
> > > [1] kiedyś zdarzały się podobne numery z fdiskiem tylko na
> > > niedystrybucyjnym kernelu na zwykłych dyskach IDE czy SCSI, ale chyba
> > > przeszło (od paru miesięcy już czegoś takiego nie widziałem).
> > Owszem - wariuje.
> > U siebie mam starą binarkę ze strony mylexa - chodzi ładnie. Mam też 
> > starego patcha z tej strony, ale jest duży i do mocnego poprawienia.
> Duży? fdisk.patch z 1999 roku ma poniżej 3kB - to ten?
> Jest do fdiska z util-linux 2.8, jedyne zmiany dotyczą sposobu
> wyświetlania oraz uwzględniania /dev/rd/*, a nie odczytu geometrii.
> Zmiany te są uwzględnione w util-linux 2.11* (a raczej były, bo od
> tamtego czasu kod w niektórych miejscach się mocno zmienił).

Tak, to jest ten - coś mi się pozajączkowało, że on taki wielki (tak, 
wiem, lenistwo... =)  )


--- util-linux-2.8/disk-utils/fdisk.c-	Thu Jun 11 15:19:29 1998
+++ util-linux-2.8/disk-utils/fdisk.c	Fri Jul 17 17:44:22 1998
@@ -1100,6 +1100,7 @@
 {
 	struct partition *p;
 	char *type;
+	int digit_last = 0;
 	int i, w;
 
 #if defined(sparc)
@@ -1110,22 +1111,26 @@
 
 	w = strlen(disk_device);
 
+	if (isdigit(disk_device[w-1]))
+		digit_last = 1;
+
 	printf("\nDisk %s: %d heads, %d sectors, %d cylinders\nUnits = "
 		"%ss of %d * 512 bytes\n\n", disk_device, heads, sectors,
 		cylinders, str_units(), display_factor);
 	if (w < 5)
 		w = 5;
 	printf("%*s Boot %s  Start      End   Blocks   Id  System\n",
-	       w + 1, "Device", show_begin ? "  Begin  " : " ");
+	       (digit_last ? w + 2 : w + 1),
+	       "Device", show_begin ? "  Begin  " : " ");
 
 	for (i = 0 ; i < partitions; i++) {
 		if ((p = part_table[i])->sys_ind) {
 			unsigned int psects = get_nr_sects(p);
                         printf(
 			  show_begin
-			    ? "%*s%-2d  %c%9d%9d%9d%9d%c  %2x  %s\n"
-			    : "%*s%-2d  %c%c%9d%9d%9d%c  %2x  %s\n",
-/* device */		w, disk_device, i+1,
+			    ? "%*s%s%-2d  %c%9d%9d%9d%9d%c  %2x  %s\n"
+			    : "%*s%s%-2d  %c%c%9d%9d%9d%c  %2x  %s\n",
+/* device */		w, disk_device, (digit_last ? "p" : ""), i+1,
 /* boot flag */		!p->boot_ind ? ' ' : p->boot_ind == ACTIVE_FLAG
 			? '*' : '?',
 			  show_begin ?
@@ -1805,6 +1810,14 @@
 			try("/dev/edb", 0);
 			try("/dev/edc", 0);
 			try("/dev/edd", 0);
+			try("/dev/rd/c0d0", 0);
+			try("/dev/rd/c0d1", 0);
+			try("/dev/rd/c0d2", 0);
+			try("/dev/rd/c0d3", 0);
+			try("/dev/rd/c0d4", 0);
+			try("/dev/rd/c0d5", 0);
+			try("/dev/rd/c0d6", 0);
+			try("/dev/rd/c0d7", 0);
 		}
 		exit(0);
 	}
@@ -1812,7 +1825,7 @@
 	if (opts) {
 		/* Silly assumptions here about device naming */
 		nowarn = 1;
-		disk_device = (char *) malloc(9);
+		disk_device = (char *) malloc(16);
 		type_open = O_RDONLY;
 
 		opts = argc - optind;
@@ -1821,13 +1834,25 @@
 
 		for (j = optind; j < argc; j++) {
 			part = argv[j];
-			if (strlen(part) < 9)
-				fatal(usage);
-			if (!(i = atoi(part + 8)))
-				fatal(usage);
-			i--; 	/* count from 0 */
-			strncpy(disk_device, part, 8);
-			disk_device[8] = 0;
+			if (strncmp(part, "/dev/rd/", 8) == 0) {
+				char *p = strrchr(part, 'p');
+				if (p == NULL)
+					fatal(usage);
+				if (!(i = atoi(p + 1)))
+					fatal(usage);
+				i--; 	/* count from 0 */
+				*p = '\0';
+				strcpy(disk_device, part);
+				
+			} else {
+				if (strlen(part) < 9)
+					fatal(usage);
+				if (!(i = atoi(part + 8)))
+					fatal(usage);
+				i--; 	/* count from 0 */
+				strncpy(disk_device, part, 8);
+				disk_device[8] = 0;
+			}
 			if ((fd = open(disk_device, type_open)) < 0)
 				fatal(unable_to_open);
 			close(fd);

-- 
---------------------------------
pozdr.  Paweł Gołaszewski        
---------------------------------
CPU not found - software emulation...



Więcej informacji o liście dyskusyjnej pld-devel-pl