C enemigo de los archivos GIGAntes

Imagen de carlosV2.0
0 puntos

Que tal?

 

Ya sea por Gnome o por Ubuntu (posiblemente por Gnome), tengo problemas cuando quiero, por ejemplo, copiar un archivo de 4,6 GB (por ejemplo, una imagen de CD). Sencillamente, a media copia, se cancela y me muestra mi directorio home.

 

Probé de hacer un cat <archivo grande> y me lo empezó a mostrar correctamente (no llegué al final).

Entonces se me ocurrió la genial idea de "divide y vencerás" y empecé a crear mi propio cortador de archivos, pero tampoco me deja usar archivos grandes. Concretamente, cuando uso estas instrucciones:

    fd=fopen( ll_args[2], "rt" );
    fseek(fd, 0, SEEK_END);
    ttotal = ftell(fd);

Cuando le meto un archivo pequeño, me da el tamaño correcto del archivo pero si es un archivo grande, da un error en la opertura del archivo y no me deja ir hasta el final.

 

Que pasa con los archivos gigantes? Como puedo trabajar en C con ellos?

 

Carlos 

Imagen de Dissaor
+1
0
-1

No te puedo ayudar mucho, e igual es una tontería, y puede que eso ya lo hallas comprobado, pero lo suelto por si sirve de algo.

 

Mira a ver que sistema de archivos estás usando en esa máquina, y mira a ver cual es su tamaño máximo permitido. Igual necesites cambira y utlizar otro sistema de archivos, para manipular archivos de gran tamaño.

 

Saludos!!

+1
0
-1
Imagen de carlosV2.0
+1
0
-1

Gracias por contestar

 

Pos no, no miré el sistema de archivos . Ahora que lo acabo de mirar, me indica q es ext3. Es el formato por defecto que te instala ya q en en la instalación de Ubuntu, le dije q usara todo el disco y q no me preguntase más y me hizo una partición con ext3 y otra con swap.

 

Entonces, el problema viene pq el sistema de archivos es ext3? 

 

Carlos

+1
0
-1

Carlos
La solución más sencilla es probablemente la correcta (Navaja de Occam)
Hoy por ti, mañana por mi. Aprender para enseñar

Imagen de Dissaor
+1
0
-1

Con Ext3 no tendrías que tener ningún problema ya que como mínimo el tamaño máximo soportado será de 16 GB hasta 2TB me parece.

Así que tendrá que ser por otro cosa.

De todas formas si vas a gestionar habitualmente archivos de gran tamaño, me parece que hay otros sistemas de archivos mejores para ese caso.

No entiendo porqué le hechas directamente la culpa a C. Entiendo que lo dices porque no puedes manipular archivos de gran tamaño desde algún programa que has escrito en C, y tampoco copiar desde Gnome con arrastrar y soltar.

Puede que para manipular archivos grandes se tenga que hacer de alguna forma especial, y puede que no todos los programas estén programados pensando en esa situación, aunque me extraña que pase con gnome.

Siento no poder ayudarte más, cuando tenga un rato probaré a copiar de una carpeta a otra un fichero de ese tamaño, a ver si a mi me funciona que tengo curiosidad. 

A ver si de momento alguien puede ayudarte.

Suerte!! 

+1
0
-1
Imagen de carlosV2.0
+1
0
-1

 Buenas,

 

Bueno, lo siento, no pretendia culpar a C, tan solo pretendía decir de donde me salia el error.

 

Te comento, el error de copia se produce cuando copio a o desde un ftp (dentro de mi LAN) y cuando copio a o desde el disco duro externo (por USB). No he probado de hacer una copia interna.

Lo curioso del tema es que el servidor de ftp esta en un Ubuntu 7.04 y sin embargo, dese Win, si me deja manipular los archivos del tamaño que sea.

 

Nu se, es muy raro. De todos modos, si no es culpa de C y teóricamante, ext3 es válido, de q puede ser?? O por donde puedo seguir buscando para allar la solución?

 

Muchas gracia 

 

Carlos

+1
0
-1

Carlos
La solución más sencilla es probablemente la correcta (Navaja de Occam)
Hoy por ti, mañana por mi. Aprender para enseñar

Imagen de HaMmeTT
+1
0
-1

C es FAT32?

+1
0
-1
Imagen de HaMmeTT
+1
0
-1

Me respondo a mí mismo.

Sí es FAT32

Encima que se muestra un interés en responder hay gente que pasa de ti

¬.¬

+1
0
-1
Imagen de Dissaor
+1
0
-1

Cuando tenga un rato, que ahora estoy muy agobiado, intentaré probarlo, por curiosidad.

Intentaré probar a pasar de un ordenador a otro de mi red local, aunque el otro ordenador es de mi hermana y sólo tiene XP, y no estoy seguro si aun tengo configurada la red desde ubuntu, desde la última vez que me actualice a una nueva versión.

¿En que sistema de archivos está particionado el disco externo? mira a ver si es por eso. Lo del servidor, pues no se a ver si lo puedo probar cuando pueda.

Suerte. 

+1
0
-1
Imagen de carlosV2.0
+1
0
-1

Que tal?

 

Mira, te comento:

 

Servidor ftp:

  SO: Linux Ubuntu 7.04

  Tipo: Sobremesa

  Procesador: Pentium IV

  RAM: 512 MB (si no me equivoco)

  Tabla de particiones:

     - Partición de 54,46 GB en ext3

     - Partición de 1,44 GB en swap

  Tipo de conexión:

     - Ethernet

  Velocidad de conexión:

     - 100 Mb/s

  El error se produce:

     - Al subir archivos grandes al ftp

     - Al bajar archivos grandes del ftp

 

Disco duro externo:

  Tabla de particiones (desde fàbrica y tocado también con Windows XP):

     - Partición de 298,09 GB en FAT32

  El error se produce:

     - Al "subir" archivos al disco duro (no testeado al "bajar")

  Tipo de conexión:

     - USB 2.0

  Velocidad de conexión:

     - 480Mb/s (según Wikipedia)

 

Ordenador que administra el tinglao:

  SO: Linux Ubutnu 7.04

  Tipo: Portatil

  Procesador: Core 2 Duo

  RAM: 1024 MB

  Tabla de particiones:

     - Partición de 108.90 GB en ext3

     - Partición de 2,89 GB en swap

 

Método de introducción de archivos grandes a los sitemas:

  - Al server ftp:

    - Con aMule, posibles imagenes de DVD

    - Con K3b, creación de imagenes de DVD

  - Al disco duro:

    - Cuando se conecta con otro ordenador con WinXP y se pasan imagenes de DVD

  - Al portatil:

    - Con K3b, creación de imagenes de DVD

    - Con Virtual Box, imagenes de disco duro (tamaño medio 20 GB)

 

No se si necesitas más información, yo creo que he proporcionado bastante. En caso de que necesites más, pidelo y te lo doy. Espero que podamos solucionar el problema.

De momento, no corre prisa. Me hubiese sido de utilidad en el pasado formateo pero por el momento, se va a pasar un tiempo sin volver a ser formateado.

 

Muchas gracias por las molestias!!

 

Carlos

+1
0
-1

Carlos
La solución más sencilla es probablemente la correcta (Navaja de Occam)
Hoy por ti, mañana por mi. Aprender para enseñar

Imagen de Dissaor
+1
0
-1

No he podido probarlo en mi ordenador, porque la última vez que reinstale el sistema para actualizarme a Edgy Eft, desconfiguré la red local y ahora no la tengo configurada. Aun estoy de exámenes así que hasta dentro de unos días no podré mirar nada. Te adelanto que sólo soy un usuario como tú, no soy ningún tipo de guru superexperto de linux.

De todo lo que te he dicho que miraras a ver si era de las particiones, creo que  podrías olvidarte porque no tiene ninguan pinta de ser de eso. De hecho tienes imágenes de ese tamaño. Lo del disco duro externo te lo preguntaba por si era NTFS que entonces no podrías escribir sólo leer, a no ser que instalases un paquete (y configuraras algunas cosas) que salió el año pasado me parece y si que te deja grabar sin problemas.

¿Has mirado si tienes permisos de escritura? De todas formas supongo que sí porque comentas que empieza a transferir y se corta de repente y no te deja seguir, y con archivos pequeños no tienes problemas.

Se me acaba de ocurrir que igual que hay comandos, o puedes configurar, en un servidor ftp, la tasa de transferencia máxima de algunos usuarios, tambíen puedas configurar el tamaño máximo de archivo. Mira a ver si van por ahí los tiros.

A ver si dentro de unos días cuando acabe los exámenes configuro mi red local (aunque no es exactamente lo mismo), o me creo un servidor ftp(en el que tengo acceso en la universidad no me deja subir tanto),  y pruebo eso. De momento igual lo único que hago es marearte.

Suerte!! 

+1
0
-1
Imagen de wodano
+1
0
-1

FAT32 es incompatible con archivos mayores de 4GB

+1
0
-1
Imagen de Dissaor
+1
0
-1

De todas formas Carlos comenta que le da el error también cuando copia desde el disco externo, por lo que entiendo que dice tener un archivo de 4.6 GB en el disco externo en FAT32. ¿es eso así? ¿tienes archivos de ese tamaño en el disco en FAT32? ¿Como es eso posible? (supongo que se le habrá colado al decir: "a o desde" en el post, ya que dudo que eso sea posible)

Bueno Carlos creo que wodano ya ha dado con el error. Ya nos dices a ver. Chao!

+1
0
-1
Imagen de carlosV2.0
+1
0
-1

Gracias a todos por las molestias. Creo q con gente tan dada a ayudar, conseguiremos resolver el enigma (además, esta, es una muy buena manera para aprender más cosas sobre nuestro todopoderoso Ubuntu jejeje)

Bueno, primeramente, quiero aclarar una cosilla. Anteriormente a este post, abrí otro post "quejandome" sobre la copia de archivos en gnome (post del cual no obtuve nada en claro y predecesor de este post por lo que comenté sobre mi programa cortador). Es decir, el cometido concreto de este post, era saber pq ese codigo que planté en el post inicial (cuyo sino es encontrar el tamaño de un archivo), no funciona en archivos grandes (esta ejecutado en un PC con partición ext3). De todos modos, gracias por querer resolver también el tema de la copia pq también me es muy interesante aunq estos dias he echo unos "experimentos" totalmente satisfactorios.

 

Vamos a ver, los errores me daban pq queria formatear el PC y queria sacar los archivos para no perderlos. La cuestión es que el proceso de sacar archivos lo realicé antes de farios formateos y en todos, me dió error al subirlo al ftp. También obtuve un error al bajar unos archivos del ftp que pasé con el disco duro.

La cuestión es que estos dias, no me ha dado ningún problema (he instalado unas actualizaciones automáticas. puede ser por eso?).

He probado con una imagen de DVD de 4,3 GB (imagen que tiempo atras, me daba error) y puedo tanto subirla como bajarla del ftp sin problemas e incluso, tb puedo bajar archivos del ftp q antes no me permitía. Es decir, de momento, el problema de la copia de archivos, esta solucionado (misteriosamente), pero de todos modos, seguiré atento a cualquier anomalía y la postearé aqui si ocurriese algún error.

 

Como decía en el inicio de este post, también me gustaría solucionar el problema del código C.

Os comento. Ese código, tiene como misión, decir el tamaño de un un archivo en bytes. El problema es que si el archivo es muy grande (por ejemplo, esa imagen de DVD de 4,3 GB), directamente no lo abre y me da un error en la segunda linea (cuando intenta situar el cursor en la última posición).

No se si puede ser problema de la partición o q, pero os comento toda la información sobre el PC donde se ejecuta el código:

Tipo: Portatil

SO: Ubuntu 7.04 (obvio, sino, no estaría aqui ;) )

RAM: 1 GB DDR2

HDD: 120 GB cuyas particiones son:

- 108,90 GB en ext3

- 2,89 GB en swap

Compilador de C: gcc

Versión del compilador: 4.1.2

Librerias usadas:

- stdio.h

- stdlib.h

- string.h

Error (en modo normal):

- Fallo de segmentación (core dumped)

Error (en modo depuración (con gdb)):

149 fd=fopen( ll_args[2], "rt" );
(gdb) next
150 fseek(fd, 0, SEEK_END);
(gdb) next

Program received signal SIGSEGV, Segmentation fault.
0xb7df715b in fseek () from /lib/tls/i686/cmov/libc.so.6

 

Según veo, el error es que directamente no abre el archivo fd (pero si que lo abre y el código funciona perfectamente con archivos pequeños) por lo que al intentar acceder en la siguiente linea, da error. Puede ser que Linux intenta cargar todo el archivo en RAM y no tiene suficiente espacio? (no creo ¿no? seria muy raro).

 

Muchas gracias a todos!

 

P.D.: Perdonad por tardar tanto en contestar :P

 

Carlos

+1
0
-1

Carlos
La solución más sencilla es probablemente la correcta (Navaja de Occam)
Hoy por ti, mañana por mi. Aprender para enseñar

Imagen de Dissaor
+1
0
-1

Si quieres que la gente te ayude lo mejor es hacer preguntas cortas que no ocupen mucho, y que se centren en un tema. Abre un post para cada pregunta.

Si tienes algún problema en la copia de archivos la culpa será tuya o de linux, pero no creo que sea de Gnome, que lo único que hace es proporcionarte una interfaz gráfica.

Si vas a hacer pruebas hazlas en una partición EXT3, porque como han dicho aquí FAT32 no soporta archivos grandes, y puede que de ahí esos errores que te dan, puede que halla un tamaño que no existe en verdad o lo que sea.

Sobre lo de tu programa en C, no se muy bien lo que hace fseek porque nunca lo he usado, pero el error que te da es de violación de segmento. Estás intentando acceder a una zona de memoria que no existe.

Con fseek(fd, 0, SEEK_END) estás moviendo el puntero que apunta al fichero, y que está en el inicio de este, a la última posición.

Es en esa función donde te da error, antes de usarla, lo normal sería comprobar si se ha abierto bien el fichero con un if, y si se ha abierto bien pues entonces invocas fseek.

El error se podría deber a que no se ha abierto bien el fichero (tema de particiones, fichero que no existe porque lo has escrito mal, tu programa no tiene permisos para abrir ese archivo en el modo que le indicas, etc..), compruebalo, y haz las pruebas en una partición EXT3 donce tengas el ejecutable y el archivo a abrir, para asegurarte que si algo falla es por tu código y no por el tema del sistema de archivos de esa partición.

Otro apunte, abres el fichero en modo "rt". ¿Que modo es ese? veo que es lectura en modo texto, y los archivos tan grandes que estás abriendo son binarios, ¿no? 

(Bueno perdona se me había pasado que al final vuelves a hablar del problema de tu programa y dices que es por que no se habre bien el archivo)

Busca en manuales de programación a ver si se pueden abrir a piñon archivos tan grandes y el problema es por algo que te comento arriba, o a lo mejor se tienen que ir  abriendo poco a poco, conforme vas necesitando acceder a unas partes o a otras. No te puedo ayudar porque nunca he probado este tipo de cosas.

Mi consejo es que habras otro post para este tema.

Chao suerte!!

+1
0
-1
Imagen de carlosV2.0
+1
0
-1

 Gracias!

 

Tienes razon, deberia plantear las dos preguntas en sendos posts separados. peor la cuestión, es q la pregunta sobre copiar archivos. ya la planteé (este post era para resolver el problema con C) y me dijeron que muy seguramente, el problema era de Gnome pero q al no saber, no me podian ayudar. Por eso, al decirme q el problema es mio o de Linux y no de gnome, me he quedado contrariado.

 

Sobre lo de C, ahora mismo no puedo mirarmelo. Esta noche realizaré más pruebas.

 

Muchas gracias por tu respuesta! 

 

Carlos

+1
0
-1

Carlos
La solución más sencilla es probablemente la correcta (Navaja de Occam)
Hoy por ti, mañana por mi. Aprender para enseñar